1

以编程方式设置 rootViewController 时出现奇怪的行为。我只使用xib,这里是我已经尝试过的场景。当我使用此代码时,在正确加载 VC 之前会出现一小段黑屏闪烁。

- (void)setRootVC:(UIViewController *)viewController {
    UIWindow *window = [[[UIApplication sharedApplication] delegate] window];    
    [UIView transitionWithView:window
                      duration:0.0
                       options:UIViewAnimationOptionTransitionNone
                    animations:^{ window.rootViewController = viewController; }];
}

当我使用不同的功能时,它消除了眨眼,但还有另一种奇怪的行为。我在新的 VC 中得到了一堆文本字段,我将其中一个设置为becomeFirstResponderinviewDidLoad方法,但是当 VC 加载时,它textFieldDidEndEditing被调用,这很奇怪。这是代码。

- (void)setRootVC:(UIViewController *)viewController {
        UIWindow *window = [[[UIApplication sharedApplication] delegate] window];
        [UIView transitionFromView:window.rootViewController.view
                             toView:viewController.view
                           duration:0.0                  
                            options:UIViewAnimationOptionTransitionNone
                         completion:^(BOOL finished){
                                    window.rootViewController = viewController;
                                    }];
}

我受到 Objective-C 的限制,因此快速的解决方案将无济于事。感谢您的回复。

4

1 回答 1

0

闪烁是由于您将 rootViewController 设置为完成,它应该在动画块中,所以下面的代码可能对您有帮助..

[UIView transitionWithView:self.window
                  duration:0.5
                   options:UIViewAnimationOptionTransitionNone
                animations:^{ self.window.rootViewController = viewController; }
                completion:nil];

而不是使用UIViewAnimationOptionTransitionNone你可能想要添加一些过渡效果,所以你可以使用UIViewAnimationOptionTransitionCrossDissolve它,它可能看起来更好..

希望能帮助到你。

干杯。

于 2017-06-09T18:14:18.817 回答