UITableView:以编程方式设置数据源

时间:2010-07-30 12:41:01

标签: iphone uitableview datasource subview

在我的iPhone应用程序中,我有一个UIViewController,它有一个UITableView和另一个UIView,在它的xib文件中,xib的视图包含UITableView和另一个UIView。两个视图都作为IBOutlet链接到xib文件中的相应视图。 当我想以编程方式为UITableView设置数据源时,我在UIViewController中创建了一个这样的方法:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil tableDataSource:(id)dataSource{
if ((self = [self initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
    // Custom initialization
    self.inventoryTableView.dataSource = dataSource;
    //[self.inventoryTableView reloadData];
}
return self;}

然后我在我的另一个类中实现以下方法,我们称之为B:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

最后,我分配+ init B并将实例传递给创建UIViewController的方法initWithNibName:bundle:tableDataSource:。所有视图都出现在模拟器中,但似乎没有调用数据源方法。 我做了类似于另一个控制器的工作,但它是一个UITableViewController,而TableView是控制器的视图。是否有可能作为子视图我必须使用与initWithNib不同的另一种方法设置数据源?

更新 通过将数据源分配放在viewDidLoad:方法中,我能够解决它。在我看来,即使在调用[self initWithNibName:nibNameOrNil bundle:nibBundleOrNil]之后,主视图的子视图也没有正确显示

2 个答案:

答案 0 :(得分:2)

看看这个答案,我认为它类似于你提出的使用“B”作为控制器的外部数据源。

Simple way to separate UITableview datasource and delegate from main UIViewController class?

答案 1 :(得分:0)

正如在更新和评论中所述,我通过更改设置委托/数据源的位置来解决,因为必须等待分配和引入tableView。在我看来,作为子视图,它比类

的主视图更晚分配/输入
相关问题