UITableView:以编程方式设置数据源
Posted
技术标签:
【中文标题】UITableView:以编程方式设置数据源【英文标题】:UITableView: programmatically set the data source 【发布时间】:2011-03-23 05:39:53 【问题描述】:在我的 iPhone 应用程序中,我有一个 UIViewController,它有一个 UITableView 和另一个 UIView,在它的 xib 文件中,xib 的视图包含 UITableView 和另一个 UIView。两个视图都作为 IBOutlets 链接到 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;
最后我 alloc+init B 并将实例传递给方法 initWithNibName:bundle:tableDataSource:
创建 UIViewController。所有视图都出现在模拟器中,但数据源方法似乎没有被调用。
我对另一个控制器做了类似的事情并且可以工作,但它是一个 UITableViewController 而 TableView 是控制器的视图。是否有可能作为一个子视图,我必须在不同于 initWithNib 的另一种方法中设置数据源?
更新:
通过将数据源分配放在viewDidLoad:
方法中,我能够解决它。在我看来,即使在调用 [self initWithNibName:nibNameOrNil bundle:nibBundleOrNil]
之后,主视图的子视图也没有正确启动
【问题讨论】:
【参考方案1】:看看这个答案,我认为它类似于您提出的使用“B”作为控制器的外部数据源的建议。
Simple way to separate UITableview datasource and delegate from main UIViewController class?
【讨论】:
我读过它和里面的链接。我不想从 IB 传递(并让它分离我的数据源类)我只想以编程方式完成它(我已经为帖子中所说的另一种类似情况做了)。 我似乎通过在viewDidLoad:
方法中设置数据源来解决它。但我仍然不明白为什么它适用于其他类【参考方案2】:
正如更新和评论中所说,我通过更改设置委托/数据源的位置来解决,因为有必要等待 tableView 被分配和初始化。在我看来,作为子视图,它的分配/初始化晚于类的主视图
【讨论】:
你能发布你的 viewDidLoad 方法吗?我正在尝试做与您相同的事情,但是在 viewDidLoad 方法中您将 self.table.dataSource 设置为什么?在上面的代码中,您可以将其设置为 init 方法中可用的 dataSource以上是关于UITableView:以编程方式设置数据源的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式设置 UITableView 部分标题(iPhone/iPad)?
以编程方式为 UITableView 和 UISearchBar 设置 NSLayoutConstraints
如何以编程方式设置 UITableView 标头的约束以支持 RTL 和 LTR?