是否有人使用TableViewController而没有子类化?

时间:2011-07-19 08:28:27

标签: iphone objective-c xcode

我只是好奇。在IB中,我们可以放一个tableviewcontroller。但是,据我所知,我们总是将tableview控制器子类化吗?这样我们就可以实现委托等。

然而,似乎对于某些“默认”行为,IPhone意图使用tableviewcontroller。否则,为什么IB会让我们像这样放置tableViewController?

是否存在人们在没有子类化的情况下使用tableViewController的示例代码?

他们在哪里实现绘制的细胞等等?


我想这个问题的正确答案是使用没有子类的UITableViewController简直太荒谬了。没有人在做这件事。如果我错了,请纠正我。我很好奇。

4 个答案:

答案 0 :(得分:3)

您是否使用UITableViewControllerUIViewController的子类,您需要设置表格将要显示的数据,否则,空白表的重点是什么?要实现这一点,您必须子类化并实现一些方法。将委托和数据源保存在同一个控制器中也是一个好主意,除非复杂性真的要求不同的类。

话虽这么说,我总是创建自己的表控制器作为UIViewController的子类,并自己实现表控制器方法,因为它为您提供了更大的灵活性。 Matt Gallagher有几个关于如何以及为什么的帖子。见UITableView construction, drawing and management (revisited)

如果您想尝试一下,请使用XIB创建UIViewController的子类并添加以下示例代码:

// interface
#import <UIKit/UIKit.h>
@interface SettingsVC : UIViewController <UITableViewDelegate, UITableViewDataSource> 
@property (nonatomic, retain) IBOutlet UITableView *tableView;
@property (nonatomic, retain) NSMutableArray *array;
@end

// implementation
@synthesize tableView = _tableView;
@synthesize array = _array;
# pragma mark - UITableViewDataSource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [self.array count];
}
- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    int row = [indexPath row];
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    cell.textLabel.text = [self.array objectAtIndex:row];
    return cell;
}

然后将一个UITableView对象添加到XIB,将控制器的tableView链接到UITableView对象,并将UITableView的委托和数据源链接到控制器。

答案 1 :(得分:2)

不,没有必要使用tableViewController继承您的类。您可以简单地使用表格视图 将TableViewController放在xib中。

并将其委托和数据集设置为文件的所有者,您可以绘制表格单元格。

答案 2 :(得分:1)

我认为您不能使用UITableViewController ,就像使用UIViewController而没有子类化它:您无法设置任何内部机制。< / p>

但是您可以使用UITableView而不使用UITableViewController

答案 3 :(得分:1)

当然可以使用UITableViewController而无需对其进行子类化。

Samplecode非常简单直接。

例如:

- (IBAction)selectSomeOption:(id)sender {
    UITableViewController *tableViewController = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped];
    tableViewController.tableView.dataSource = self;
    tableViewController.tableView.delegate = self;
    tableViewController.title = "Select some option";
    [self.navigationController pushViewController:tableViewController animated:YES];
}

并且UITableViewDatasource和Delegate方法进入同一个类。

当然,如果你喜欢疼痛,你可以在代码中创建一个UIViewController,并自己添加一个tableView。 或者为这么简单的任务创建一个子类。

使用非子类UITableViewController有时很方便。