2012-02-08 46 views
0

我有下面的代码到我的UIViewController类的实现:如何以编程方式分配/替换现有的UITableView与新的?

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

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

  1. 我失去了StoryBoard的使用,因为表格是动态添加到视图中的。我想在StoryBoard中安排我的观点,而不必手动调整其在代码中的位置。
  2. 我也希望能够在运行时(如果可能)在CustomUITableViews之间交换。例如,如果我创建一个“CustomUITableView_Number2”,我可以简单地决定在运行时使用哪个自定义类作为表格吗?

我知道我可以在StoryBoard中通过给UITableView分配一个自定义类来完成此任务,但是我想看看我能够使用的代码有多远。我的目标是使用StoryBoard布置布局,但在运行时分配我想要的自定义类。

有谁知道这是可能的吗?示例代码真的有帮助。谢谢。

+0

故事板是什么意思? – Legolas 2012-02-08 03:18:46

+0

你可以在这里阅读:https://developer.apple.com/library/ios/#documentation/General/Conceptual/Devpedia-CocoaApp/Storyboard.html – TERACytE 2012-02-08 03:49:43

+0

哦,好吧!对它进行硬编码呢? – Legolas 2012-02-08 05:16:27

回答

1

您可以从界面构建器加载常规UITableView,然后使用您感兴趣的参数从UITableView初始化一个CustomUITableView。如果你一定要注明你认为你会在Interface Builder修改每个属性

- (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]; 
} 

这种方法会奏效。只要确保在复制属性后删除通过笔尖加载的UITableView。

+0

我在想同样的事情,但希望更简单:)。这是我的备用计划。 Thanx Joel。 – TERACytE 2012-02-08 03:51:40

0

确定您可以替换表格。 东西作为

Class MyTableClass = NSClassFromString(@"WhateverClass"); 
    id newTableView = [[MyTableClass alloc] init]; 
    [newTableView performSelector:@selector(someSel:)]; 

简单确保你设置你的数据源和委托和任何从原来的笔尖性能第一次实例化视图,然后 然后你可以在本地实现代码如下属性设置为这个新的对象,只要伊娃有一个合适的演员,你可以调用它的方法,而不诉诸上述的运行时调用。

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

相关问题