如何以编程方式更改 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 的类?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式更改 UIImageView 的高度?

以编程方式更改 UITabBarControllers tabBar 属性的类 [重复]

如何以编程方式设置 UITableView 的高度

如何使用自动布局以编程方式创建 UITableView?

如何以编程方式在 UITableView 中添加视图?

如何从以编程方式创建的 UITableView 中分离?