0

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

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

无论如何,我有故事板,

                                                          TableViewController
NavigationController->ViewController->TabViewController [
                                                          AnotherViewController

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

  1. 我找不到如何将新的 ViewController 连接到 TableViewController 的方法(反之亦然)

所以我尝试了常规的做事方式

didSelectRowAtIndexPath:(NSIndexPath *)indexPath

我把ff:

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

我试图在 Attributes Inspector 上给控制器一个标识符,但它不起作用,并且给了我以下崩溃堆栈:

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,

4

3 回答 3

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];

}

确保您在项目管理器中也设置了故事板。

于 2012-11-20T02:20:39.490 回答
0

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

否则在情节提要中,您不会使用您所说的推送方法。您使用 performSegueWithIdentifier。故事板是关于 segues 的。您可以直接进行 segue 或使用目标操作。

同样,故事板的优势在于它们的视觉表现。使用 IB。

否则,您可能还会考虑委托(ipad 的 ESP)。

于 2012-11-20T03:11:17.247 回答
0

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

我的问题似乎是

  1. 困惑 - 一个新程序员的困境.. 虽然这个问题是一个常见的问题,但我们永远不会真正偏离它是否真的与那些已经存在并且之前问过的问题相同,直到我们自己尝试并发现它确实是。

解决方案可能因情况而异;对我来说,我试着做 ff:

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

  1. 创建要添加的视图
  2. 将鼠标指针定位到要触发 segue的 Nib 元素源视图控制器,然后保持控制
  3. 将鼠标拖动到目标视图控制器
  4. 将出现一个弹出窗口,选择您的 segue 类型(推送、模式、自定义)然后自动 xcode 将创建必要的连接
  5. 选择您的目标视图控制器,在属性检查器上有一个带有标识符字段的可折叠组 - >在此字段上,您将为视图放置自定义标识符

所以源代码看起来像;

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

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

  1. 创建要添加的视图
  2. 为新控制器提供必要的标识符,然后你就可以开始了
  3. 使用与上述相同的来源

但是,使用这种方法会破坏故事板的一致性,为什么要使用这种方法?(仍然是我必须找出的东西),当您开始寻找从未存在的 segue 箭头时,它并不明显,尽管它有效。

由于我没有带有名称的笔尖 ????,此代码将不起作用,

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

并且由于它在故事板上并假设一切都是使用故事板完成的,那么是时候忘记 nibName 因为它永远不会发生..

希望这个想法能帮助一些人......

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

谢谢。

于 2012-11-21T05:06:57.743 回答