如何以编程方式分配/替换现有的UITableView?

时间:2012-02-08 03:15:03

标签: iphone objective-c ios ipad

我的UIViewController类实现有以下代码:

- (void)viewDidLoad {
    CustomUITableView *customUITableView = [[CustomUITableView alloc] initWithFrame:self.view.frame];        
    [self.view addSubview:customUITableView];    
    [super viewDidLoad];
}

当我运行应用程序时,表格显示就好了。我对这种方法有两个问题:

  1. 由于表格动态添加到视图中,我失去了对StoryBoard的使用。我想在StoryBoard中安排我的视图,而不必手动调整其在代码中的位置。
  2. 我还希望能够在运行时在CustomUITableViews之间进行交换(如果可能的话)。例如,如果我创建一个“CustomUITableView_Number2”,我可以在运行时简单地决定我要为表使用哪个自定义类吗?
  3. 我知道我可以通过为UITableView分配一个自定义类来在StoryBoard中实现这一点,但是我想看看我能用多远的代码来完成代码。我的目标是使用StoryBoard排列布局,但在运行时分配我想要的自定义类。

    有人知道这是否可行?示例代码确实会有所帮助。感谢信。

2 个答案:

答案 0 :(得分:1)

您可以从界面构建器加载常规UITableView,然后使用您感兴趣的参数从UITableView初始化CustomUITableView。

- (void)viewDidLoad {

    //Your tableView was already loaded
    CustomUITableView *customUITableView = [[CustomUITableView alloc] initWithFrame:tableView.frame style:tableView.style];   
    customUITableView.backgroundColor = tableView.backgroundColor;
    //...
    //... And any other properties you are interested in keeping 
    //...    
    [self.view addSubview:customUITableView];    
    [super viewDidLoad];
}

如果您确保在界面构建器中指定您认为要修改的每个属性,则此方法将起作用。只需确保在复制属性后删除通过nib加载的UITableView。

答案 1 :(得分:0)

确保您可以更换表格。 像

这样简单的事情
Class MyTableClass = NSClassFromString(@"WhateverClass");
    id newTableView = [[MyTableClass alloc] init];
    [newTableView performSelector:@selector(someSel:)];

确保首先设置数据源和委托以及原始nib实例化视图中的任何属性 然后,您可以将本地tableview属性设置为此新对象,只要ivar具有正确的强制转换,您就可以在其上调用方法,而无需像上面那样使用运行时调用。

如果您想以不同的方式进行操作,也可以深入了解obj-c运行时。 https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html