使用 ios5 和情节提要推送带有参数的视图控制器

Posted

技术标签:

【中文标题】使用 ios5 和情节提要推送带有参数的视图控制器【英文标题】:push view controller with arguments using ios5 and storyboard 【发布时间】:2011-12-26 14:01:42 【问题描述】:

我正在使用 sdk 5 和 Storyboard 开发一个 iPad 应用程序,该应用程序来自一个已经工作的 iPhone 应用程序(使用单独的 xibs 开发)。我了解情节提要的工作原理,但我想推送带有参数的视图控制器。按钮调用 logIn2 操作,如:

   - (IBAction)logIn2: (NSString *)strUser: (NSString *)strPass

    userViewController *UserViewController = [[userViewController alloc] initWithNibName:@"userViewController" bundle:nil stringOne:strUser stringTwo:strPass];
    //UserViewController.hidesBottomBarWhenPushed = YES;
    [[self navController] pushViewController:UserViewController animated:YES];

这工作正常,但使用 sdk 5 在第一行返回错误。如何通过参数推送视图?谢谢。

【问题讨论】:

错误:接收器类型 'userViewController' 例如消息未使用选择器 'initWithNibName:bundle:stringOne:stringTwo:' 声明方法 [4] 【参考方案1】:

如果您说您想将您的应用程序转换为使用 Storyboard 和 Segues,那么您将制作一个 Segue 来推送 UserViewController。在 UserViewController 中放置一些属性来存储参数。然后覆盖 prepareForSegue 并设置其中的属性。有关详细信息,请参阅此答案:

Properly accessing a segue's destination view controller to assign protocol delegates

【讨论】:

【参考方案2】:

从错误消息中很明显,在您的 UserViewController 上没有方法声明 initWithNibName:bundle:stringOne:stringTwo:'。你的 UserViewController 是什么样子的?

【讨论】:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil stringOne:(NSString *)aStringOne stringTwo:(NSString *)aStringTwo 【参考方案3】:

您是否在 .h 文件中声明了自定义初始化程序?否则,只会找到标准的 initWithNibName 初始化程序作为选择器,而不是您指定的初始化程序 - 因此会出现错误消息。

【讨论】:

在标题中声明它是不够的;还必须在 .m. 中实现它。

以上是关于使用 ios5 和情节提要推送带有参数的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

您可以使用为带有情节提要的 xib 创建的视图控制器吗?

iOS 5 在现有应用程序中实现带有情节提要的页面控制器

推送视图控制器不显示从情节提要添加的元素

推送视图控制器后从情节提要加载视图

iOS 在使用情节提要推送视图控制器时传递数据

情节提要:导航的条件转场(推送)