相关疑难解决方法(0)

addChildViewController实际上做了什么?

我只是第一次踏入iOS开发阶段,而我必须要做的第一件事就是实现一个自定义的容器视图控制器 - 让我们调用它SideBarViewController- 交换出几个可能的子视图控制器中的哪一个显示,几乎完全像标准的标签栏控制器.(它几乎是一个标签栏控制器,但有一个可隐藏的侧面菜单而不是标签栏.)

根据Apple文档中的说明,addChildViewController每当我将一个子ViewController添加到我的容器时,我都会调用它.用于交换当前子视图控制器的代码如下所示SideBarViewController:

- (void)showViewController:(UIViewController *)newViewController {
    UIViewController* oldViewController = [self.childViewControllers 
                                           objectAtIndex:0];

    [oldViewController removeFromParentViewController];
    [oldViewController.view removeFromSuperview];

    newViewController.view.frame = CGRectMake(
        0, 0, self.view.frame.size.width, self.view.frame.size.height
    );
    [self addChildViewController: newViewController];
    [self.view addSubview: newViewController.view];
}
Run Code Online (Sandbox Code Playgroud)

然后我开始试图弄清楚addChildViewController这里有什么,我意识到我不知道.除了ViewController.childViewControllers阵列中粘贴新内容外,它似乎对任何东西都没有影响.从孩子控制器的视图到我在故事板上设置的子控制器的操作和出口仍然可以正常工作,即使我从不打电话addChildViewController,我无法想象它还能影响到什么.

事实上,如果我重写我的代码不打电话addChildViewController,而是看起来像这样......

- (void)showViewController:(UIViewController *)newViewController {

    // Get the current child from a member variable of `SideBarViewController`
    UIViewController* oldViewController = currentChildViewController;

    [oldViewController.view removeFromSuperview];

    newViewController.view.frame = CGRectMake( …
Run Code Online (Sandbox Code Playgroud)

uiviewcontroller ios uicontainerview

98
推荐指数
3
解决办法
4万
查看次数

addChildViewController和presentModelViewController有什么区别

我知道有三种方法可以在iOS中更改视图

1.

[self addChildViewController:thirdViewController]; 
[contentView addSubview:thirdViewController.view]; 
Run Code Online (Sandbox Code Playgroud)

2.

First * sVC = [[First alloc] initWithNibName:@"First" bundle:[NSBundle mainBundle]]; 
[self presentModalViewController:sVC animated:YES];
Run Code Online (Sandbox Code Playgroud)

3.

MyViewController *sampleViewController = [[[MyViewController alloc]initWithXXX] autorelease];       
[self.navigationController pushViewController: sampleViewController animated:true];
Run Code Online (Sandbox Code Playgroud)

pushViewController需要导航控制器,我理解.但是,何时使用addChildViewController和presentModalViewController?

view addchild pushviewcontroller presentmodalviewcontroller ios

10
推荐指数
1
解决办法
5412
查看次数

viewWillAppear不会触发属于UITabBarController的UIViewController,直到我切换标签

在我的iOS应用程序中,我有一个UITabBarController,它的viewControllers列表看起来像[vc1, vc2],它们分别是类MyVC1MyVC2两个子类UIViewController.MyVC1覆盖viewWillAppear,覆盖的版本打印一些东西,所以我知道它什么时候被调用.(这是为了隔离我遇到的一个更大的问题,这是一个没有出现的观点.)

我的问题是,当应用程序首次启动并且vc1是选定的选项卡时,不会打印任何内容,这意味着它viewWillAppear不会被调用.如果我切换标签,然后回去vc1,东西确实得到印刷,所以vc1viewWillAppear不被调用,直到我切换回它从另一个选项卡.

有没有办法在应用启动时立即vc1拨打电话viewWillAppear,而无需切换标签?老实说,我很惊讶这不是默认行为.

uitabbarcontroller uiviewcontroller ios

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