在 appDelegate 中使用 Navigation 编程 TabBarController

Posted

技术标签:

【中文标题】在 appDelegate 中使用 Navigation 编程 TabBarController【英文标题】:Programming TabBarController with Navigation in appDelegate 【发布时间】:2012-12-12 08:34:29 【问题描述】:

我正在尝试在我的 tabbarcontroller 的第三个选项卡中包含一个导航控制器。我有一些反馈,但我只能做到这一点。下面的代码不会产生任何错误,但似乎无法正常工作,因为应用程序刚刚退出。有人对我可能做错的事情有任何意见吗?

UIViewController *viewController1 = [[FirstViewController alloc] 
initWithNibName:@"PDCFirstViewController" bundle:nil];

UIViewController *viewController2 = [[SecondViewController alloc] 
initWithNibName:@"SecondViewController" bundle:nil];

viewController3 = [[UIViewController alloc] initWithNibName:@"ThirdViewController" 
bundle:nil];
UINavigationController *navigationcontroller = [[UINavigationController alloc] 
initWithRootViewController:viewController3];

self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray 
arrayWithObjects:viewController1,viewController2,navigationcontroller, nil];

谢谢大家!

int main(int argc, char *argv[])

@autoreleasepool 
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([PDCAppDelegate class]));


【问题讨论】:

AFAIK 到目前为止看起来还不错。 你究竟是从哪里得到崩溃的?崩溃日志是什么样的? @HermannKlecker,我在应用程序启动时遇到了崩溃。我已更新我的问题以显示错误。 调试器还能说什么?您是否尝试设置 All-Exceptions 断点? (如果是这样,那么您可能会在实际错误消息打印到调试控制台之前单击 continue 几次) 嗨@HermannKlecker,我不再崩溃了,但现在我的应用程序只是打开一个空白屏幕。我在这里创建了一个新问题:***.com/questions/13836189/… 任何指导都会很棒!谢谢! 【参考方案1】:

确保您使用的所有笔尖名称以及类名,即 如果 UIViewController 的类名是 FirstViewController,则 nib 名称应该相同。您已经使用“PDCFirstViewController”作为笔尖名称。 与 ThirdViewController 和 SecondViewController 相同。

试试下面的代码...

FirstViewController *viewController1 = [[FirstViewController 分配] initWithNibName:@"FirstViewController" bundle:nil]; SecondViewController *viewController2 = [[SecondViewController 分配] initWithNibName:@"SecondViewController" bundle:nil]; ThirdViewController *viewController3 = [[ThirdViewController alloc] initWithNibName:@"ThirdViewController" 捆绑:无]; UINavigationController *navigationcontroller = [[UINavigationController alloc] initWithRootViewController:viewController3]; self.tabBarController = [[UITabBarController alloc] init]; self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1,viewController2,navigationcontroller, nil];

【讨论】:

嗨,感谢您的意见,但我仍然遇到同样的问题 你检查了所有的笔尖名称和定义的控制器类吗?并确保您在 xibs 中设置了 IBOutlet。 好的,在听从您的建议后,我不再出现崩溃,但是当应用程序加载时我只看到一个空白的黑屏。有什么想法吗? 严格来说没有必要将 nib 文件命名为与视图控制器子类相同。如果 uiviewcontroller 足够开始的话,甚至可能不需要 uiviewcontroller 的专用子类。【参考方案2】:

解决办法

UIViewController *courseView = [[[CoursesView alloc] initWithNibName:@"CoursesView" bundle:nil] autorelease];
UIViewController *subjectViewController = [[[SubjectViewController alloc] initWithNibName:@"SubjectViewController" bundle:nil] autorelease];
UIViewController *videoViewController = [[[VideoViewController alloc] initWithNibName:@"VideoViewController" bundle:nil] autorelease];
UIViewController *quizViewController = [[[QuizViewController alloc] initWithNibName:@"QuizViewController" bundle:nil] autorelease];
UIViewController *proifileViewController = [[[Profile2ViewController alloc] initWithNibName:@"Profile2ViewController" bundle:nil] autorelease];

UINavigationController *coursNav = [[UINavigationController alloc] initWithRootViewController:courseView];
UINavigationController *subjectNav = [[UINavigationController alloc] initWithRootViewController:subjectViewController];
UINavigationController *videoNav = [[UINavigationController alloc] initWithRootViewController:videoViewController];
UINavigationController *quizNav = [[UINavigationController alloc] initWithRootViewController:quizViewController];
UINavigationController *profileNav = [[UINavigationController alloc] initWithRootViewController:proifileViewController];

self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = @[coursNav, subjectNav,videoNav,quizNav,profileNav];
self.tabBarController.navigationController.navigationBarHidden=YES;
self.tabBarController.delegate=self;
[self.window addSubview:self.tabBarController.view];
[self.window makeKeyAndVisible];

对我有用

【讨论】:

以上是关于在 appDelegate 中使用 Navigation 编程 TabBarController的主要内容,如果未能解决你的问题,请参考以下文章

在 AppDelegate 中使用 ViewController 中的数组

使用情节提要时如何在appDelegate中获取指向viewController的指针

如何在 appdelegate 中使用 applicationDidEnterBackground 保存 NSUserDefault

SwiftUI中如何使用@EnvironmentObject在AppDelegate和SceneDelegate/Views之间共享数据

如何在 AppDelegate 中使用 Parse 正确设置 Facebook iOS SDK?

在 tableview 控制器中访问 AppDelegate 函数?