在现有故事板上附加了一个新的控制器

时间:2012-11-20 01:09:57

标签: iphone view controller storyboard nib

我正在做一些iPhone开发,我正在使用Storyboard来模拟和加快我的开发。

我不是来自传统的做事方式,我必须这样做吗?

无论如何,我有故事板,

                                                          TableViewController
NavigationController->ViewController->TabViewController [
                                                          AnotherViewController

我想添加一个附加到TableViewController的新ViewController,这样当我点击行项时,它会在另一个视图中显示它;但是;

  1. 我找不到如何将新的ViewController连接到TableViewController的方法(反之亦然)
  2. 所以我尝试了传统的做事方式

    didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    

    我把ff:

    CViewController *controller = [[CViewController alloc] initWithNibName:????? bundle:nil];
    [self.navigationController pushViewController:controller animated:YES];
    [controller release];
    

    我试图在属性检查器上为Controller提供一个标识符但是不起作用并且给我以下崩溃堆栈:

    Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/paulvincentong/Library/Application Support/iPhone Simulator/5.1/Applications/A1C369F8-9EAD-4794-8861-945C73F7FE0B/SyncProto.app> (loaded)' with name 'ControllerViewName' 
    

    如果我删除了标识符,我将获得no NibName异常;

    我该怎么办?我知道它应该和我能够达到四个级别的相关控制器一样,在我的脑后可能会有一些令我困惑的事情......

    TIA,

3 个答案:

答案 0 :(得分:0)

在你的cellForRow中尝试这个

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath  
*)indexPath{

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" 
bundle:nil];

ViewCont * view = (ViewCont *) [storyboard   
     instantiateViewControllerWithIdentifier:@"view"];

[tableView deselectRowAtIndexPath:indexPath animated:YES];  

[self view animated:YES completion:nil];

}

确保您还在项目经理中设置了故事板。

答案 1 :(得分:0)

你使用IB吗?在那里你可以直接拖动。

否则,在故事板中,您不使用您所说的推送方法。您使用performSegueWithIdentifier。故事板是关于segues的。您可以直接删除或使用目标操作。

故事板的力量再次以其视觉表现形式出现。使用IB。

否则你也可以考虑委托(ESP for ipad)。

答案 2 :(得分:0)

玩完之后......我找到了适合我问题的答案;

我的问题似乎是

的原因
  1. 困惑 - 一个新的程序员的困境......如果问题是一个普遍的问题,我们永远不会真正偏离,如果它与已经存在的问题完全相同,并且只在我们自己尝试之前询问并发现它确实是
  2. 解决方案因案例而异;对我来说,我试着做ff:

    方法1 :(使用“instantiateViewControllerWithIdentifier”)带有一个segue箭头

    1. 创建要添加的视图
    2. 将鼠标指针定位到要触发segue然后保持控制的Nib元素源视图控制器
    3. 将鼠标拖动到目标视图控制器
    4. 会出现一个弹出窗口,选择你的segue类型(推送,模态,自定义)然后自动xcode将创建必要的连接
    5. 选择目标视图控制器,在属性检查器上有一个带有标识符字段的可折叠组 - &gt;在此字段中,您将为视图设置自定义标识符
    6. 所以源代码看起来像;

      ViewController *view = [self.storyboard instantiateViewControllerWithIdentifier:@"CustomViewName"];
      [self.navigationController pushViewController:view animated:YES];
      

      方法2 :(使用“instantiateViewControllerWithIdentifier”)没有segue箭头

      1. 创建要添加的视图
      2. 为新控制器提供必要的标识符,然后您就可以了
      3. 使用上述定义的相同来源
      4. 然而,使用这种方法会破坏故事板的一致性,为什么要使用它? (仍然是我必须要找到的东西),当你开始寻找从未出现的segue箭头时,它并不明显,尽管它有效。

        此代码无法正常工作,因为我没有带名称的笔尖????,

        CViewController *controller = [[CViewController alloc] initWithNibName:????? bundle:nil];
        [self.navigationController pushViewController:controller animated:YES];
        

        因为它在故事板上并且假设所有内容都是使用故事板完成的,所以有时间忘记nibName,因为它永远不会发生..

        希望这个想法有所帮助...

        学习是一个彻底的过程,但它是一件非常有趣的事情......

        感谢。