iOS 5:addSubview的奇怪行为

时间:2012-04-17 16:37:00

标签: iphone objective-c ios5 uiview xcode4.3

我正在尝试在我的应用中创建一个活动指示器。我正在使用故事板,我创建了一个推动另一个视图的按钮。

以下是我打开另一个视图的方式:

- (IBAction)openView {  
    NSLog(@"View is loading");
    @try {
        UINavigationController *nav = [storyboard instantiateViewControllerWithIdentifier:@"viewOpenSegue"];
        [nav setModalPresentationStyle:UIModalPresentationFullScreen];
        [self presentModalViewController:nav animated:YES];
    }
    @catch (NSException *exception) {
        NSLog(@"Error");
    }
    @finally {
        NSLog(@"View loaded");
    }
}  

到目前为止,每件事都很好。我在打开视图之前获得了日志,在完全加载之后获得了第二个日志。

但是当我想使用addSubview方法时,我有一种奇怪的行为。

NSArray *subviewArray2 = [[NSBundle mainBundle] loadNibNamed:@"View" owner:self options:nil];
loadingView = [subviewArray2 objectAtIndex:0];  

这就是我加载视图的方式。我像这样添加/删除:

[self.view addSubview:loadingView];
//@try block
//@catch block
//@finally
{  
[loadingView removeFromSuperview];  
}  

我希望视图在屏幕上显示和消失。但是在推出视图之前看起来像是1毫秒然后突然消失。

如果我在viewDidLoad下添加这种方式,它会出现。

我见过类似的问题,但他们并没有帮助我。有人有线索吗?我应该尝试别的吗?

提前致谢。

3 个答案:

答案 0 :(得分:0)

此nib文件View.xib是否具有文件所有者?

答案 1 :(得分:0)

它发生的原因是第一个viewdidload执行比viewdidapper方法。每次推送或弹出视图时都会加载viewdidappear,因此如果要在视图加载时首先执行它,请在viewdidload中编写代码。

答案 2 :(得分:0)

因为我没有使用selector。请参考this question

以下是优化代码:

[self.view addSubview:loadingView];  
[self performSelector:@selector(openView) withObject:nil afterDelay:0];