UIViewController在收到nsnotification后从superview中删除

时间:2009-07-20 12:25:05

标签: uiviewcontroller nsnotifications

我正在尝试在收到通知后从superview中删除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];}

调用该方法,但不会从superview中删除该视图。我试图把postNotification放在 - (void)viewDidLoad中但该方法没有被调用...

为什么这不起作用的任何想法?提前谢谢你

1 个答案:

答案 0 :(得分:0)

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

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

作为旁注,我理解一些开发人员使用启动画面作为强化品牌识别的手段。话虽如此,请考虑Apples Human Interface Guidelines

  

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