Ios6 如何处理UINavigationController和UITabbarController iOS 6.1

Ios6 如何处理UINavigationController和UITabbarController iOS 6.1,ios6,uinavigationcontroller,uitabbarcontroller,uibarbuttonitem,uicollectionview,Ios6,Uinavigationcontroller,Uitabbarcontroller,Uibarbuttonitem,Uicollectionview,我需要一个很好的解释,我如何使用故事板处理iOS6.1上的UINavigationControllers和uitabarcontrollers 当我加载我的应用程序(第一个ViewController)时,我需要(FB login=success),它会自动跳转到第二个ViewController。在这里,我想我不能像root那样使用UINavigationController,苹果的HIG不喜欢它。 我需要一个连接到3个UICollectionViewController的UIAbbarCo

我需要一个很好的解释,我如何使用故事板处理iOS6.1上的UINavigationControllersuitabarcontrollers

  • 当我加载我的应用程序(第一个ViewController)时,我需要(FB login=success),它会自动跳转到第二个ViewController。在这里,我想我不能像root那样使用
    UINavigationController
    ,苹果的HIG不喜欢它。
  • 我需要一个连接到3个UICollectionViewController的
    UIAbbarController
    (每个控制器一个选项卡)。我必须把
    UITabBarController
    像根一样放进去?如果是,如何处理它们之间的其他ViewController?这样地:
  • 我需要在每个CollectionViewController上定制一个BarButtonItem(如图像2上的“全部删除”),我需要为每个CollectionViewController使用
    UINavigationController

  • 让我们假设您很乐意使用“放松”分段(如果没有,有很多方法可以不用)

    1当我加载我的应用程序(第一个ViewController)时,我需要(FB login=success)是否自动跳转到第二个ViewController。在这里,我想我不能使用像root这样的UINavigationController,苹果的HIG不喜欢它

    你是第一个VC(我们称之为loginVC)
    -不应包含在导航控制器中。
    -应设置为应用程序的initialViewController

    你的第二个VC(让我们称之为你的startVC)
    -应包含在导航控制器中
    -在该导航控制器的标识检查器中,分配情节提要ID:
    @“InitialNavController”

    在应用程序委托中,让我们使用一个
    loggedIn
    BOOL属性:

    @property (nonatomic, assign) BOOL loggedIn;
    
    现在,在您的LogInViewController中

    在<代码>视图显示中检查我们是否已登录,如果已登录,请立即导航到您的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];
        }
    }
    
    重要的是要将其放置在ViewDidDisplay中,而不是(例如)viewDidLoad中-除非初始视图已正确初始化并在屏幕上显示,否则segue将无法工作

    进行一个放松序列(并在
    loginVC
    @interface
    中声明)…如果用户注销,loginVC将成为目标VC

    - (IBAction)unwindOnLogout:(UIStoryboardSegue *)segue 
    {
        [(AppDelegate*)[[UIApplication sharedApplication] delegate] setLoggedIn:NO];
    
    }
    
    (已更正-删除此行:
    [[self-presentedViewController]解除ViewController激活:是
    完成:无];

    我们不需要忽略,因为segue已经在幕后完成了。这是多余的,并且会记录错误消息)

    在其他ViewController中,您可以在任何适当的地方创建“注销”按钮。CTRL键从该按钮拖动到情节提要中ViewController底部的“退出”符号,您将能够选择此序列作为展开序列

    2我需要一个连接到3个UICollectionViewController的UIAbbarController(每个都有一个选项卡)。我必须像根一样把控制器放进去?如果是,如何处理它们之间的其他ViewController?像这样:

    我认为您正在尝试找出tabBarController与上一个viewController(startVC)中的NavigationController之间的关系。答案是,它不应该-你真的不想在以前的导航控制器中嵌入选项卡栏VC,因为它会为选项卡栏的子视图控制器创建奇怪的情况

    从startVC到tabBarVC的导航应通过模式序列,而不是推送序列

    您可以在startVC中执行另一个展开顺序,以便于从tabBarController的ViewController返回:

    - (IBAction)unwindToInitialNavFromModal:(UIStoryboardSegue *)segue {
    
    }
    
    (已更正-删除此行:
    [[self-presentedViewController]解除视图控制器激活:是完成:无];
    此方法不需要任何内容来执行解除)

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

    默认情况下,您不会在tabBarVC中获得导航栏

    您可以通过两种方式提供一个
    -将每个子viewController嵌入到它自己的导航控制器中
    -手动将导航栏拖动到每个子viewController的场景

    两者都可以,这实际上只是取决于您是否希望导航到其他ViewController

    然后,您可以在左侧或右侧添加一个按钮图标,以连接到initialVC的展开序列(CTRL拖动到“退出”符号)


    让我们假设您很乐意使用展开段(如果没有,有很多方法可以不用)

    1当我加载我的应用程序(第一个ViewController)时,我需要(FB login=success)是否自动跳转到第二个ViewController。在这里,我想我不能使用像root这样的UINavigationController,苹果的HIG不喜欢它

    你是第一个VC(我们称之为loginVC)
    -不应包含在导航控制器中。
    -应设置为应用程序的initialViewController

    你的第二个VC(让我们称之为你的startVC)
    -应包含在导航控制器中
    -在该导航控制器的标识检查器中,分配情节提要ID:
    @“InitialNavController”

    在应用程序委托中,让我们使用一个
    loggedIn
    BOOL属性:

    @property (nonatomic, assign) BOOL loggedIn;
    
    现在,在您的LogInViewController中

    在<代码>视图显示中检查我们是否已登录,如果已登录,请立即导航到您的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];
        }
    }
    
    重要的是要将其放置在ViewDidDisplay中,而不是(例如)viewDidLoad中-除非初始视图已正确初始化并在屏幕上显示,否则segue将无法工作

    进行一个放松序列(并在
    loginVC
    @interface
    中声明)…如果用户注销,loginVC将成为目标VC

    - (IBAction)unwindOnLogout:(UIStoryboardSegue *)segue 
    {
        [(AppDelegate*)[[UIApplication sharedApplication] delegate] setLoggedIn:NO];
    
    }
    
    (已更正-删除此行:
    [[self-presentedViewController]解除ViewController激活:是
    完成:无];