1

我正在尝试在收到通知后从超级视图中删除 UIViewController 但它不起作用。

在我的 appDelegate 我做这样的事情:

- (void)applicationDidFinishLaunching:(UIApplication *)application{    
NSLog(@"applicationDidFinishLaunching");
[window addSubview:tabBar.view];
splash = [[SplashViewController alloc] init]; <-- this i want to remove
[window addSubview:splash.view];
[window makeKeyAndVisible]; }

在 SplashViewController 我注册视图以接收 NSNotifications,如下所示:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fadeScreen:) name:@"CloseSplashScreen" object:nil];

SplashViewController 出现在 Default.png 之后,并且在解析一些数据后应该平滑地消失......

在我的 TableViewControler 中,我想在 viewWillAppear 方法中发送通知,但它不起作用。

- (void)viewWillAppear:(BOOL)animated{
NSLog(@"viewWillAppear");
[[NSNotificationCenter defaultCenter] postNotificationName:@"CloseSplashScreen" object:self];}

该方法被调用,但视图没有从父视图中删除。我试图将 postNotification 放入 - (void)viewDidLoad 但该方法没有被调用...

任何想法为什么这不起作用?先感谢您

4

1 回答 1

0

由于看起来您正在尝试实现某种启动画面,因此请考虑使用 UINavigationController 来呈现启动画面。您正在做的是添加一个视图控制器视图作为 UIWindow 的子视图,但没有人管理您的视图控制器。这不是你应该做的事情。

UIWindow 有方法 setRootViewController 应该在你的 appDelegate 中。这样你就可以推送你的 Splash Controller,并在一定的时间间隔后推送应用程序的第一个 viewController。

作为旁注,我了解一些开发人员使用启动画面作为加强品牌标识的一种手段。话虽如此,请考虑Apple 的人机界面指南

尽可能避免显示启动画面或其他启动体验。最好是用户可以立即开始使用您的应用程序。

于 2014-08-08T13:02:16.840 回答