如何以编程方式更改 UITableView 的类?
Posted
技术标签:
【中文标题】如何以编程方式更改 UITableView 的类?【英文标题】:How to change the class of UITableView programmatically? 【发布时间】:2013-11-19 09:03:09 【问题描述】:我有一个 UITableViewController,不想使用故事板。
据我所知,UITableViewController 负责初始化 UITableView,将其连接到它的 dataSource 和委托。这对我来说效果很好。
我现在想将 UITableView 的类更改为自定义类 (BVReorderTableView)。这在 IB 中很容易做到。但是,一旦我以编程方式执行此操作,我的 UITableView 是空的,也就是说它似乎与它的源和委托断开了连接。
这是我在 UIViewController 的初始化中所做的:
-(id)init
self = [super initWithStyle:UITableViewStyleGrouped];
if (self)
// Custom initialization
self.tableView = [[BVReorderTableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
self.tableView.dataSource = self;
self.tableView.delegate = self;
我做错了什么?
【问题讨论】:
你检查数据源了吗?委托方法是否触发(其中包含 NSLog)? 我会在 viewDidLoad 中实现这个,而不是在 init 中实现。 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 没有被解雇@Bourne。但是 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 是......我如何检查数据源?我的意思是,如果我不使用我的自定义 BVReorderTableView 类,一切都很好。非常感谢! @Cutetare 谢谢,成功了!但为什么?请将您的答案作为答案,以便我将其标记为正确。 【参考方案1】:由于 ViewController 的生命周期,您应该在 viewDidLoad 而不是 init 中实现它。在 viewDidLoad 中,他已经拥有了所有要使用的对象,这在 init 期间不一定是正确的。
您可以查看this question 以获取有关 ViewController 生命周期的更多信息。 :)
【讨论】:
【参考方案2】:请将您的UITableView
设置为viewDidLoad
方法而不是init
方法。在 init 方法中,视图将在其中包含的子视图之前初始化自身。
希望对你有帮助
【讨论】:
以上是关于如何以编程方式更改 UITableView 的类?的主要内容,如果未能解决你的问题,请参考以下文章