uinavigationcontroller栏按钮项无响应

时间:2013-12-04 22:40:07

标签: ios iphone objective-c uistoryboardsegue

我是初学者iPhone开发者,所以如果此处缺少信息我会道歉。我创建了一个故事板,其中有一个初始视图控制器(用于app登录),如果我检测到已经有用户登录(我已经存储了已经存储的用户的API令牌),那么我将加载一个导航控制器,而不是定义了一个根视图控制器,它是一个表视图控制器。在表视图控制器中,我有一个导航项,其中包含左右栏按钮项。我添加了另一个带有标签的视图控制器,然后我从右侧导航栏按钮项拖动到简单视图控制器以创建一个segue。当我构建和运行应用程序时,这个segue是不起作用的。我还尝试创建一个IBAction并将其挂钩到右侧栏按钮项和NSLog“Hello world”但这不起作用。以下是我如何初始化故事板:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Instantiate the UIStoryBoard
    UIStoryboard *initiialStoryBoard = [UIStoryboard storyboardWithName:@"iPhoneStoryboard" bundle:nil];

    [[UIApplication sharedApplication] setStatusBarHidden:NO];
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

    // Set the first view controller of the storyboard as the root controller.
    User *user = [[User alloc] init];

    if ([user token] == nil) {
        [self.window setRootViewController: [initiialStoryBoard instantiateInitialViewController]];
    } else {
        UINavigationController *feedNavigationController = [initiialStoryBoard instantiateViewControllerWithIdentifier:@"feedNavigationController"];
        [self.window setRootViewController:feedNavigationController];
    }

    [self.window makeKeyAndVisible];

}

有人可以建议我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

首先,删除方法application:didFinishLaunchingWithOptions:中的所有代码,然后删除return YES;

创建您的故事板,如下图所示。

  1. 使用UINavigationController作为您的切入点。

  2. 将您的身份验证视图控制器设置为rootViewController

  3. UINavigationController
  4. 使用身份验证视图控制器中的另一个segue到Feed视图控制器,并为其指定segue标识符segueFeed

  5. Controllers and Segues in Storyboard

    之后,将以下代码添加到您的身份验证视图控制器:

    - (void) awakeFromNib
    {
        // Set the first view controller of the storyboard as the root controller.
        User *user = [[User alloc] init];
    
        if ([user token] == nil)
        {
            // do nothing because the correct view controller will be shown
        }
        else
        {
            // show the feed view controller
            [self performSegueWithIdentifier:@"segueFeed" sender:nil];
        }
    }
    

    现在,如果没有给出令牌,将自动显示认证视图控制器,否则将立即显示馈送视图控制器。此时,您可以添加自己的导航项(如Action 1Action 2),并通过segues将它们与其他视图控制器连接。