在我的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]
之后,主视图的子视图也没有正确显示
答案 0 :(得分:2)
看看这个答案,我认为它类似于你提出的使用“B”作为控制器的外部数据源。
Simple way to separate UITableview datasource and delegate from main UIViewController class?
答案 1 :(得分:0)
正如在更新和评论中所述,我通过更改设置委托/数据源的位置来解决,因为必须等待分配和引入tableView。在我看来,作为子视图,它比类
的主视图更晚分配/输入