【问题标题】:how do I change initWithNibName for storyboard use?如何更改 initWithNibName 以供故事板使用?
【发布时间】:2013-07-07 18:52:08
【问题描述】:

我正在使用来自 ray 的以下教程 http://www.raywenderlich.com/913/sqlite-101-for-iphone-developers-making-our-app

除了要从 didselectrow 填充的详细视图之外,我让一切正常工作

这就是他所拥有的

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (self.details == nil) {

        self.details = [[[FailedBanksDetailViewController alloc] initWithNibName:@"FailedBanksDetailViewController" bundle:nil] autorelease];        
    }
    FailedBankInfo *info = [_failedBankInfos objectAtIndex:indexPath.row];
    _details.uniqueId = info.uniqueId;
    [self.navigationController pushViewController:_details animated:YES];
    [self performSegueWithIdentifier:@"testID" sender:self.view];
}

但它不适用于情节提要

谁能帮帮我,我到处找答案!!!

【问题讨论】:

    标签: ios tableview didselectrowatindexpath


    【解决方案1】:

    目前您使用的代码是用于 bob 的 NIB 和情节提要。选择1并坚持下去。如果您使用故事板,只需执行 segue 然后处理 prepareForSegue:sender: 以配置目标视图控制器。

    【讨论】:

      【解决方案2】:

      尝试:

      self.details = [self.storyboard instantiateViewControllerWithIdentifier:@"FailedBanksDetailViewController"];
      

      其中FailedBanksDetailViewController 是主情节提要中视图控制器的identifier

      由于您使用的是http://www.raywenderlich.com,您可以查看here 以获取故事板示例。

      【讨论】:

        【解决方案3】:

        几个选项:

        1. 您可以为要过渡到的场景提供“故事板 ID”(您在 Interface Builder 中执行此操作),然后使用 instantiateViewControllerWithIdentifier 而不是 initWithNibName

        2. 如果您在情节提要中使用单元原型,则根本不需要 didSelectRowAtIndexPath 方法,只需将单元原型中的转场添加到下一个场景即可。然后编写一个prepareForSegue 方法,将uniqueId 传递给下一个场景。

          prepareForSegue 可能看起来像:

          - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
          {
              if ([segue.identifier isEqualToString:@"DetailsSegue"])
              {
                  NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
                  FailedBankInfo *info = [_failedBankInfos objectAtIndex:indexPath.row];
                  [(FailedBanksDetailViewController *)segue.destinationViewController setUniqueId:info.uniqueId];
              }
          }
          

          显然,将 DetailsSegue 替换为您为 segue 的故事板 ID 提供的任何名称。

        【讨论】:

        • 非常感谢!这开始对我有用,但是当我输入代码时,我得到一个错误 Property 'tableView' not found on object of 'locationViewController *' 有什么想法吗?
        • 当我尝试在视图控制器顶部使用表格视图时会发生这种情况
        • @Thomasrocks 如果您按照该教程进行操作,FailedBanksListViewController 是一个 UITableViewController 子类,它为它提供了一个 tableView 属性。我不知道这个locationViewController 类是什么。您是否刚刚将 tableview 添加到 UIViewController 子类?如果是这样,表格视图的IBOutlet 是什么?只需将self.tableView 替换为您的tableview 的IBOutlet
        • 我在视图顶部添加了一个表格视图,因为我试图将其作为子视图合并到另一个应用程序中。我不认为我为桌子添加了一个 iboutlet。我想我把自己弄糊涂了。我该怎么做?非常感谢您的回复
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多