Конвертировать UITableViewController в UITable VIew Object - PullRequest
0 голосов
/ 21 марта 2011

В настоящее время у меня есть значения загрузки NSArray в UITableViewController NIB.Я понимаю, что хочу использовать таблицу вместе с другими объектами в моем представлении, такими как метки, кнопки и т. Д. Поэтому мне нужно использовать объект UITableView в моем UIView.

Как правильно это кодировать?Могу ли я скопировать методы из моего текущего класса TabeViewController в мой класс UIView?

#import "LogTableViewController.h"


@implementation LogTableViewController
@synthesize logArray;

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)dealloc
{
    [super dealloc];
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];

    logArray = [[NSArray alloc]initWithObjects:@"Today's Workout", @"Last Workout", @"Past Week", @"Past Month", @"All Workouts", nil];

    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
#warning Potentially incomplete method implementation.
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
#warning Incomplete method implementation.
    // Return the number of rows in the section.
    return [logArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell...

    cell.textLabel.text = [logArray objectAtIndex:indexPath.row];

    return cell;
    }

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.
    /*
     <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
     // ...
     // Pass the selected object to the new view controller.
     [self.navigationController pushViewController:detailViewController animated:YES];
     [detailViewController release];
     */
}

@end

Ответы [ 3 ]

4 голосов
/ 21 марта 2011

STEP-1

В вашем .h (заголовочном файле) измените

@interface <viewControllername>:UITableViewController

на

@interface <viewControllername>:UIViewController

ШАГ-2:

В XIB удалите tableView в качестве основного вида и добавьте UIView из библиотеки.Подключите view выход владельца файла к этому UIView.

Теперь вы можете использовать ViewController в качестве обычного класса UIViewController.

Добавьте tableView в View сейчас и укажите его размеры.

Также вам нужно будет теперь поставить выход в tableView, так как он уже не UITableViewController, а UIViewController.Также не забудьте подключить таблицы datasource и delegate к владельцу файла

Теперь вы можете легко разместить другие элементы управления рядом с tableView.

Надеюсь, это поможет вам.

2 голосов
/ 21 марта 2011

Если я правильно понимаю ваш вопрос, похоже, у вас есть подкласс UITableViewController, и вы хотите изменить его на подкласс UIViewController.

Есть несколько вещей, которые вам нужно пройти, чтобы сделать это, и, надеюсь, я не забуду ни одного из шагов.

Сначала в файле @interface измените суперкласс ваших классов, выполните протокол источника данных и делегируйте протокол и, наконец, объявите выход для UITableView:

@interface YourViewControllerName : UIViewController <UITableViewDataSource, UITableViewDelegate>
{
}
@property (nonatomic, retain) IBOutlet UITableView *myTableView;

Перейдите к файлу реализации и @synthesize свойство tableView:

@implementaion YourViewControllerName
@synthesize myTableView;

Вам также нужно изменить назначенный инициализатор, если вы создаете свой viewcontroller программно и выполняете какие-либо настройки во время его инициализации (похоже, это не так, как вы упомянули, имея файл NIB, но здесь это так. в любом случае):

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

Скопируйте методы делегата табличного представления и источника данных из старого контроллера представления, а также любой пользовательский код инициализации для вашего источника данных (NSArray *). Обычно это создается в вашем методе viewDidLoad:.

Перейдите к вашему файлу NIB (тот, который содержит только объект табличного представления). Добавьте объект UIView в перо и переместите объект табличного представления как его подпредставление.

Соедините UIView с выходом представления вашего владельца файла и UITableView с выходом myTableView владельца файла путем перетаскивания из владельца файла к соответствующим объектам. Сделайте владельца файла вашим источником данных таблицы делегата и делегатом, но управляйте перетаскиванием из таблицы в владелец файла.

И если я не забуду что-то, это все, что вам нужно сделать.

Не стесняйтесь задавать любые вопросы в разделе комментариев.

Приветствия

1027 * Рог *

1 голос
/ 31 мая 2013

Ответ Парта выше был великолепен - но мне пришлось сделать еще одну вещь в моем коде.

Одной из вещей, которые вы теряете при переходе с UITableViewController на UIViewController, является свойство clearsSelectionOnViewWillAppear. Поэтому я добавил реализацию viewDidAppear следующим образом:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    NSArray *selectedRows = [self.tableView indexPathsForSelectedRows];
    if (selectedRows) {
        for (NSIndexPath *selectedPath in selectedRows) {
            [self.tableView deselectRowAtIndexPath:selectedPath animated:NO];
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...