相关疑难解决方法(0)

View Controller Containment如何在iOS 5中运行?

在2011年WWDC会话102,苹果推出视图控制器遏制,这是创建定制的视图控制器容器的能力,类似于UITabBarController,UINavigationController和类似物.

我多次看过这些例子.有一系列与这种模式相关的方法,但有点难以弄清楚它们.我将在这里发布我认为正在发生的事情,看看社区是否会确认或否定我的怀疑.

场景1:从无父节点移动到新的父视图控制器

[vc willMoveToParentViewController:self];
[self addChildViewController:vc];
[self.view addSubview:vc.view]; // or something like this.
[vc didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)

前两行必须按给定的顺序发生,还是可以反转?

场景2:从父视图控制器移动到没有父视图控制器

[vc willMoveToParentViewController:nil];
[vc.view removeFromSuperview];
[vc removeFromParentViewController];
Run Code Online (Sandbox Code Playgroud)

还有必要打电话[vc didMoveToParentViewController:nil]吗?会话102中的示例在这种情况下没有这样做,但我不知道这是否是遗漏.

场景3:从一个父视图控制器移动到另一个父视图控制器

这可能以下列方式发生,因为将封装每个父视图控制器中的逻辑.

// In the old parent
[vc willMoveToParentViewController:nil];
[vc.view removeFromSuperview];
[vc removeFromParentViewController];

// In the new parent
[vc willMoveToParentViewController:self];
[self addChildViewController:vc];
[self.view addSubview:vc.view];
[vc didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)

问题

我的主要问题是:一般来说,视图控制器包含应该如何工作?上面给出的机制是否正确?

是否有必要在打电话willMoveToParentViewController前打电话addChildViewController?这对我来说似乎是合乎逻辑的顺序,但它是否是必要的?

打电话didMoveToParentViewController:nil后有必要打电话removeFromParentViewController吗?

uiviewcontroller ios ios5

107
推荐指数
2
解决办法
5万
查看次数

使用动画交换rootViewController

我在使用动画交换rootViewControllers方面遇到了一些麻烦.这是我正在使用的代码:

[UIView transitionWithView:self.window duration:0.8 options:UIViewAnimationOptionTransitionFlipFromRight animations:^{
        self.window.rootViewController = self.navigationController;
    } completion:nil];
Run Code Online (Sandbox Code Playgroud)

除了在动画之前,屏幕变成黑色然后动画发生之外,它有点工作.看起来原始的rootViewController在动画之前就被删除了.有任何想法吗?

cocoa-touch objective-c uiviewcontroller ios

33
推荐指数
3
解决办法
2万
查看次数

如何使用多个iOS自定义视图控制器而不使用导航控制器

我正在构建一个使用多种类型屏幕的应用程序 - 所有这些都保证了自己的自定义视图控制器.我成功视图控制器,并通过重新分配的主要及其相关视图之间切换windowrootViewController,在我的应用程序代理类似下面的方法:

- (void)changeRootViewController:(NSString *)controllerName
{
    if (controllerName == @"book") {
        rootViewController = (UIViewController *)[[BookViewController alloc] init];
        [self.window setRootViewController:rootViewController];
    } else if (controllerName == @"something_else") {
        // Use a different VC as roowViewController
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,我这样做的方式似乎不是最好的做法.我也不想使用a UINavigationController或a UITabBarController作为rootViewController.这是否是这样做的错误方式,如果是这样,我应该如何以不同的方式接近它?

我以为这会被覆盖在某个地方,但是(我觉得好像)我用Google搜索了它,找了相关的问题等等.抱歉,如果我错过了什么!

iphone uiviewcontroller uiwindow ipad ios

8
推荐指数
2
解决办法
9517
查看次数

UIViewController转换 - objective-c

我有UIViewControllersA和B,他们被分配AppDelegate.我需要对它们进行过渡.如何在不重新分配和更换的情况下过境UIViews?这段代码来自我的UIBarButtonItemin UINavigationController:

[UIView transitionFromView:self.view  //UIViewController A
                           toView:appDelegate.secondViewController.view //UIViewController B
                           duration:0.5 
                           options:UIViewAnimationOptionTransitionFlipFromLeft   
Run Code Online (Sandbox Code Playgroud)

这个方法取代UIViews了我UIViewControllers,我可以将它们转回,或者只是不知道该怎么做.你能告诉我怎么做吗?

objective-c uiviewcontroller uiview uiviewanimationtransition ios

5
推荐指数
1
解决办法
9935
查看次数