tableView initwithframe和storyboard

时间:2014-01-03 11:39:11

标签: ios objective-c uitableview

我正在尝试将tableview作为子视图添加到我的tableViewController,但我想在storyboard中设置单元格。它将是一个静态的tableview

这是在按钮点击时调用tableview的代码。

- (IBAction)botaoAdicionar:(id)sender {
    AtividadesPraticadasTableView *tableview = [[AtividadesPraticadasTableView alloc] initWithFrame:CGRectMake(0, 170, 320, 320) style:UITableViewStylePlain];
    [self.view addSubview:tableview];
}

tableview课程中我有这个:

@implementation AtividadesPraticadasTableView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

现在,我在故事板中有viewcontroller tableviewtableview的类已更改为此文件AtividadesPraticadasTableView。它在storyboard中有三个静态自定义单元格,因此会打开一个空白默认tableview

我错过了什么?

3 个答案:

答案 0 :(得分:2)

静态表格视图完全包含在故事板中,并需要故事板中的信息来显示其内容。

您已在故事板中定义了一个静态表视图控制器,填充它并将tableView的自定义类设置为您的自定义类,但是当您要添加表视图时,您只是实例化该类的表视图。这不会获得您添加到故事板的任何信息。

此外,静态单元信息由 UITableViewController 读取和理解,而不是 UITableView ,因此您也处于错误的级别。

您需要执行以下操作:

  • 从原始视图控制器的storyboard属性(如果它与静态表位于同一故事板上)或使用storyboardWithName:bundle:获取对故事板的引用。

  • 使用instantiateViewControllerWithIdentifier:从该故事板中实例化表视图控制器。这将创建一个包含所有静态单元格的表视图控制器对象

  • 使用addChildViewController:
  • 将其作为子视图控制器添加到原始视图控制器
  • 将表格视图控制器的tableView添加为子视图

在故事板中添加容器视图以保持此视图可能更简单,并在按下按钮时显示它,正如Mike Slutsky建议的那样 - 这将完成所有实例化和添加和子视图控制器工作对你而言,原则仍然是一样的。

此外,将表视图作为子视图添加到表视图控制器听起来非常狡猾 - 表视图控制器已经有一个表视图作为其视图,并且您无法真正添加子视图。

答案 1 :(得分:1)

您遗漏的内容是编程实例化的tableview与您在故事板中放置的UITableView之间的关联。您不能只在故事板中绘制UITableViews并开始在控制器代码中实例化新UITableViews,并期望xcode知道您想从故事板中使用哪个UITableView。使用IBOutlet将控制器的全局变量连接到故事板中的UITableView,然后控制器将知道您要引用的内容。如果您希望点击按钮显示UITableView,只需在故事板中将UITableView默认设置为隐藏,然后在按下按钮时取消隐藏。

答案 2 :(得分:-1)