如何处理UINavigationControllers和UITabBarControllers的iO

2019-07-21 14:22发布

我需要一个很好的解释我如何处理UINavigationControllersUITabBarControllers上iOS6.1故事板。

  1. 当我打开我的应用程序(第1的ViewController)我需要的,如果(FB登录=成功),它塞格斯到第二的ViewController自动跳转。 在这里,我想我不能使用UINavigationController像根,苹果的HIG不喜欢它。
  2. 我需要UITabBarController连接到3个UICollectionViewControllers (为每一个一个标签)。 我必须把UITabBarController像根? 如果是的话,我怎么能处理他们之间的其他Viewontrollers? 像这样:
  3. 我需要每个CollectionViewController定制BarButtonItem(如“全部删除”,您可以在图像2上看到的),我需要使用一个UINavigationController为每一个?

Answer 1:

让我们假设你乐于使用放松塞格斯(如果不是有很多种方法,而不做)。

1当我打开我的应用程序(第1的ViewController)我需要的,如果(FB登录=成功),它塞格斯到第二的ViewController自动跳转。 在这里,我想我不能使用像根一个UINavigationController,苹果的HIG不喜欢它。

你第一次VC(可以称之为loginVC)..
- 不应该被包含在导航控制器。
- 应设置为应用程序的initialViewController

你的第二个VC(可以称之为你的startVC)
- 应包含在导航控制器
-在导航控制器的身份检查,分配storyboardID: @"InitialNavController"

在应用程序委托,让我们来loggedIn BOOL属性:

@property (nonatomic, assign) BOOL loggedIn;

现在,在LogInViewController ...

viewDidAppear检查,看看是否已经登录,如果是的话,立即浏览startVC:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    if ([(AppDelegate*)[[UIApplication sharedApplication] delegate] loggedIn]) {
        UINavigationController* navController = 
           [[self storyboard] instantiateViewControllerWithIdentifier:@"InitialNavController"];
        [self presentViewController:navController
                           animated:NO
                         completion:nil];
    }
}

重要的是,这是在viewDidLoad中放入viewDidAppear,而不是(例如) - 该SEGUE不会工作,除非最初的观点是正确的初始化和屏幕上。

做一个展开Segue公司(在其声明loginVC@interface )... loginVC将目的地VC,如果用户注销。

- (IBAction)unwindOnLogout:(UIStoryboardSegue *)segue 
{
    [(AppDelegate*)[[UIApplication sharedApplication] delegate] setLoggedIn:NO];

}

校正-删除这条线:
[[self presentedViewController] dismissViewControllerAnimated:YES completion:nil];
我们不需要解雇作为SEGUE已经做好了幕后。 这是多余的和记录错误消息

在其他viewControllers,徘徊无论合适你可以做一个“退出”按钮。 按Ctrl键从该按钮在视图控制器在故事板底部的“退出”的符号,你将可以选择这种赛格瑞为开卷SEGUE。

2 I需要连接到3个UICollectionViewControllers(为每一个一个标签)一个的UITabBarController。 我必须把像根的UITabBarController? 如果是的话,我怎么能处理他们之间的其他Viewontrollers? 像这样:

我认为你正在试图制定出tabBarController如何与NavigationController在前面的viewController(startVC)。 答案是,它不应该 - 你真的不想嵌入标签栏VC在前面的导航控制器,因为它会创建一个标签栏的孩子viewControllers怪异的情况。

从startVC到tabBarVC导航应该是通过一个模式SEGUE,而不是推SEGUE。

你可以让另一开卷Segue公司在startVC,以方便您的tabBarController的viewControllers回报:

- (IBAction)unwindToInitialNavFromModal:(UIStoryboardSegue *)segue {

}

校正-除去这一行: [[self presentedViewController] dismissViewControllerAnimated:YES completion:nil]; 该方法不需要任何内容,以执行所述解聘

3,我需要每个CollectionViewController定制BarButtonItem(如“全部删除”,您可以在图像2上看到的),我需要使用一个UINavigationController为每一个?

你会不会在默认情况下你的tabBarVC得到一个导航条。

你可以提供一个在两个方面
- 嵌入每个孩子的viewController在它自己的浏览器;
- 手动拖动导航栏,以每个孩子的viewController的场景。

无论是好的,它真的只是取决于你是否愿意导航到其他ViewControllers。

然后,您可以添加在左边或右边一个barButtonItem,最多可连接到initialVC的开卷赛格瑞(CTRL拖动到“退出”符号)。



文章来源: How to handle UINavigationControllers and UITabBarControllers iOS 6.1