iPhone ModalViewController 来自第一个标签栏视图

Posted

技术标签:

【中文标题】iPhone ModalViewController 来自第一个标签栏视图【英文标题】:iPhone ModalViewController from First Tab Bar View 【发布时间】:2012-08-22 06:28:54 【问题描述】:

我正在尝试在加载 TabBarController 视图之前启动初始登录/注册屏幕。我已经读过将 ModalViewController 放在第一个视图中是一个不错的方法。这可行,但我正在尝试将导航控件添加到 ModalViewController。我遇到以下问题:

1 - 错误:在“AppDelegate”类型的对象上找不到属性“navigationController”

2 - 警告:使用不兼容类型“id”的表达式初始化“AppDelegate *”

这是我的 ModalViewController 上的代码:

-(IBAction)signUpButtonTapped 
// i need to get the control for main navigation controller
AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
[appDelegate.navigationController popToRootViewControllerAnimated:NO];
// create object from app main view to push it
SignUpViewController *signUpViewController = [[SignUpViewController alloc] initWithNibName:@"SignUpViewController" bundle:nil];
[AppDelegate.navigationController pushViewController:signUpViewController animated:YES]; 

有人有什么想法吗?非常感谢!

【问题讨论】:

使用 (AppDelegate*) 对 AppDelegate 进行类型转换将解决警告 看看我的回答,它也会解决你的错误 【参考方案1】:

您的代码中有两个问题

1) 使用类名访问 OBJECT。它必须是 appDelegate.nav...(小号 a 用于解决 1 错误)

[appDelegate.navigationController pushViewController:signUpViewController animated:YES];

2) 类型转换分配(用于解决 2 警告)

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];

所以你的完整工作代码必须像

-(IBAction)signUpButtonTapped 
  // i need to get the control for main navigation controller
  AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
  [appDelegate.navigationController popToRootViewControllerAnimated:NO];
  // create object from app main view to push it
  SignUpViewController *signUpViewController = [[SignUpViewController alloc] initWithNibName:@"SignUpViewController" bundle:nil];
  [appDelegate.navigationController pushViewController:signUpViewController animated:YES]; 

【讨论】:

【参考方案2】:

AppDelegate 实例声明如下:

 AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication]delegate];

改变这个,你就可以开始了。

【讨论】:

太好了,这消除了我的警告,但我仍然收到错误:在“AppDelegate”类型的对象上找不到属性“navigationController”。我已经声明了它,但它一直显示这个错误。有任何想法吗?谢谢!【参考方案3】:

在你的代码中修改这一行

AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];

作为

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

现在就试试吧

【讨论】:

太好了,这消除了我的警告,但我仍然收到错误:在“AppDelegate”类型的对象上找不到属性“navigationController”。我已经声明了它,但它一直显示这个错误。有任何想法吗?谢谢! 你是否在 Appdelegate 中声明了 Navigationcontroller 的属性【参考方案4】:

1.确保您的 appDelegate 有一个名为 navigationControllerUINavigationController 属性。

2.代码的第 2 行: AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];

3.您的代码的最后一行: [appDelegate.navigat.... 不是:[AppDelegate.navigatio....

【讨论】:

以上是关于iPhone ModalViewController 来自第一个标签栏视图的主要内容,如果未能解决你的问题,请参考以下文章

在 iphone 5 和 iphone 6 中动态设置字体大小

Surface Pro4链接不上iphone手机的热点

iphone13和12外观的区别 iphone13和iphone12对比哪个好

为 iPhone 和 iPhone 4 开发之间有啥变化?

iPhone 5 与 iPhone 4 的图像命名

设置图像以适合 iPhone 5 和 iPhone 6