【问题标题】:Accessing prototype cell defined in UITableViewController in storyboard for instantiation of that class in code访问故事板中 UITableViewController 中定义的原型单元,以便在代码中实例化该类
【发布时间】:2014-08-30 06:45:08
【问题描述】:

我有一个 UITableViewController,在我的故事板中定义了一个原型单元。我为此创建了 UITableViewController 的子类,并且我希望从代码中实例化 this 的新实例。我已经这样做了:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    MyTableViewController *mtvc = [[MyTableViewController alloc] init];
    [self.navigationController pushViewController:mtvc animated:YES];
}  

当我选择一行以调出新表格视图时出现异常,“无法将具有标识符 MyIdentifier 的单元格出列 - 必须为标识符注册一个 nib 或一个类或连接一个原型单元格故事板”

我认为这是因为原型单元是在情节提要中定义的,而不是在我的代码中。是否有一种正确的方法可以在我的代码中定义原型单元格,以便在我在代码中实例化 MyTableViewController 的实例时可以访问它?或者有没有办法访问故事板中的定义?

【问题讨论】:

    标签: ios objective-c uitableview


    【解决方案1】:

    据我了解,我认为不是

    MyTableViewController *mtvc = [[MyTableViewController alloc] init];

    您应该尝试使用情节提要方法实例化表格视图控制器

    – instantiateViewControllerWithIdentifier:

    在这种情况下,您的表格视图控制器没有机会知道故事板中定义的原型单元格。

    希望这会有所帮助。

    【讨论】:

    • 谢谢!这真的很好用。我希望你能做这样的事情,但我找不到答案。
    【解决方案2】:

    如果您的单元格是情节提要中的原型单元格,则不应检查单元格是否=nil,然后再检查是否创建单元格。您只需使用重用标识符将单元格出列(也将重用标识符添加到情节提要原型单元格中)。所有这些都是在 cellForRowAtIndexPath 委托方法,而不是您发布的 didSelectRowAtIndexPath。有你的问题。

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    
        MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCustomCell"];
        return cell*
    }
    

    【讨论】:

      【解决方案3】:

      最好在storyboard中创建一个push segue并调用[self performSegueWithIdentifier:@"Segue Identifier"]

      如果您在MyTableViewController.m 中定义了cellForRowAtIndexPath:indexPath 方法,并且您像这样初始化单元格:

      MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"My Identifier"]

      它应该可以工作。

      【讨论】:

        【解决方案4】:

        谢谢大家的帮助。我设法让它工作。我最终继承了 UITableCell 并在那里定义了我的原型单元。然后我在 viewDidLoad 中为 MyTableViewController 注册该类,如下所示:

        [self.tableView registerClass:[MyTableViewCell class] forCellReuseIdentifier:@"MyIdentifier"];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-09
          • 2014-09-13
          • 2012-01-08
          • 1970-01-01
          • 1970-01-01
          • 2016-01-23
          相关资源
          最近更新 更多