如何将静态UITableView设置为UIView的子视图?

时间:2013-11-01 15:57:47

标签: ios objective-c uiview uitableview

当我使用TableViewController时,我可以在故事板中设置所有内容。由于我使用静态单元而不是动态属性作为我的表视图,我发现这种方法更方便,更容易实现。我挂钩新的UITableView类,只是删除所有委托方法。像故事一样工作,因为所有内容/按钮都在故事板中设置。

我正在努力完成相同的结果,除了这次,我必须在ViewController内工作并添加TableView作为子视图。一旦我连接了正确的类,添加我的插座连接并设置以下代表:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 3;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"MainCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    return cell;
}

如果我的TableView设置为动态属性,则效果很好: enter image description here

但是当我将表格视图内容更改为 静态单元格 并删除委托方法时,我的应用程序崩溃了。那么,如何将静态单元格(我可以在故事板中操作)的表格视图添加到我的ViewController

3 个答案:

答案 0 :(得分:28)

这是你能做的。在故事板中,创建一个包含所有非tableview视图的父视图控制器,创建一个UITableViewController。在父视图控制器中,创建容器视图,删除它自动添加的视图控制器,右键单击并从容器视图拖动到UITableViewController以创建嵌入segue。你的最终结果应该是这样的:

enter image description here

答案 1 :(得分:1)

你还需要做几件事:
<UITableViewDataSource, UITableViewDelegate>添加到@interface声明中 然后您也可以在Interface Builder中设置它们 实施cellForRowAtIndexPath并调用dequeueReusableCellWithIdentifier方法返回单元格。

抱歉,我错了。事实是,如果没有UITableViewController,您就无法使用静态单元格。抱歉。

解决方案可能是您创建了两个控制器,只需将表视图控制器的view添加到其他视图控制器即可。

答案 2 :(得分:1)

据我所知,你不能直接这样做。至少在iOS 6中,使用静态单元格时必须使用UITableViewController。在UIViewController中使用静态表视图的一种方法是在IB中添加容器视图,并使嵌入式控制器成为表视图控制器(删除自动获取的UIViewController,在UITableViewController中拖动,并将其与嵌入器连接起来Segue公司)。您可以通过实现prepareForSegue:sender:和使用destinationViewController属性(将指向表视图控制器)从UIViewController获取对此表视图控制器的引用。