Ios 如何将initWithNibName更改为故事板使用?

Ios 如何将initWithNibName更改为故事板使用?,ios,tableview,didselectrowatindexpath,Ios,Tableview,Didselectrowatindexpath,我正在使用ray的以下教程 除了要从didselectrow填充的详细视图外,我正在使所有内容正常工作 这就是他所拥有的 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (self.details == nil) { self.details = [[[FailedBanksDetailViewController allo

我正在使用ray的以下教程

除了要从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];
}
但是,它不适用于故事板

有人能帮我吗,我到处找答案

试试看:

self.details = [self.storyboard instantiateViewControllerWithIdentifier:@"FailedBanksDetailViewController"];
其中
failedbanksdeailviewcontroller
是主情节提要中视图控制器的
标识符

由于您正在使用,您可以查看故事板示例。

试试:

self.details = [self.storyboard instantiateViewControllerWithIdentifier:@"FailedBanksDetailViewController"];
其中
failedbanksdeailviewcontroller
是主情节提要中视图控制器的
标识符

由于您正在使用,您可以查看故事板示例。

有几个选项:

  • 您可以为要转换到的场景提供一个“情节提要id”(在Interface Builder中执行此操作),然后使用
    InstanceeviewcontrollerWithiIdentifier
    ,而不是
    initWithNibName

  • 如果在故事板中使用单元原型,则根本不需要使用
    didSelectRowAtIndexPath
    方法,只需将单元原型中的一个片段添加到下一个场景即可。然后编写一个
    prepareforsgue
    方法,将
    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提供的任何名称

  • 有两种选择:

  • 您可以为要转换到的场景提供一个“情节提要id”(在Interface Builder中执行此操作),然后使用
    InstanceeviewcontrollerWithiIdentifier
    ,而不是
    initWithNibName

  • 如果在故事板中使用单元原型,则根本不需要使用
    didSelectRowAtIndexPath
    方法,只需将单元原型中的一个片段添加到下一个场景即可。然后编写一个
    prepareforsgue
    方法,将
    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提供的任何名称


  • 当前,您正在使用用于NIB和情节提要的代码。选择1并坚持它。如果使用序列图像板,只需执行该步骤,然后处理
    prepareforsgue:sender:
    以配置目标视图控制器。

    当前正在使用用于NIB和序列图像板的代码。选择1并坚持它。如果使用情节提要,只需执行以下步骤,然后处理
    prepareforsgue:sender:
    以配置目标视图控制器。

    非常感谢!但是,当我输入代码时,在“locationViewController*”类型的对象上找不到错误属性“tableView”,有什么想法吗?当我尝试在viewcontroller顶部使用表视图时,会发生这种情况,如果helps@Thomasrocks如果您在该教程中继续学习,
    FailedBanksListViewController
    是一个
    UITableViewController
    子类,它为其提供了一个
    tableView
    属性。我不知道这个
    locationViewController
    类是什么。您是否刚刚将tableview添加到
    UIViewController
    子类中?如果是,表视图的
    IBOutlet
    是什么?只需将您的tableView的
    self.tableView
    替换为
    IBOutlet
    。我在视图顶部添加了一个表视图,因为我试图将其作为子视图合并到另一个应用程序中。我想我没有在桌子上加一个插座。我想我把自己弄糊涂了。我该怎么做?非常感谢您的回复非常感谢!但是,当我输入代码时,在“locationViewController*”类型的对象上找不到错误属性“tableView”,有什么想法吗?当我尝试在viewcontroller顶部使用表视图时,会发生这种情况,如果helps@Thomasrocks如果您在该教程中继续学习,
    FailedBanksListViewController
    是一个
    UITableViewController
    子类,它为其提供了一个
    tableView
    属性。我不知道这个
    locationViewController
    类是什么。您是否刚刚将tableview添加到
    UIViewController
    子类中?如果是,表视图的
    IBOutlet
    是什么?只需将您的tableView的
    self.tableView
    替换为
    IBOutlet
    。我在视图顶部添加了一个表视图,因为我试图将其作为子视图合并到另一个应用程序中。我想我没有在桌子上加一个插座。我想我把自己弄糊涂了。我该怎么做?非常感谢您的回复