【问题标题】:uinavigationcontroller bar button item not respondinguinavigationcontroller 栏按钮项目没有响应
【发布时间】:2013-12-05 07:21:15
【问题描述】:

我是一名初学 iPhone 开发人员,因此如果此处缺少信息,我深表歉意。我创建了一个带有初始视图控制器(用于应用程序登录)的故事板,如果我检测到已经有用户登录(我已经存储了一个用户的 API 令牌),那么我将加载一个导航控制器,而不是定义了一个根视图控制器,它是一个表视图控制器。在表格视图控制器中,我有一个导航项,其中包含左右栏按钮项。我添加了另一个带有标签的视图控制器,然后我 ctrl 从右侧导航栏按钮项拖动到简单视图控制器以创建一个 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];

}

谁能建议我做错了什么?

【问题讨论】:

    标签: ios iphone objective-c uistoryboardsegue


    【解决方案1】:

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

    如下图所示创建故事板。

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

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

    3. 使用另一个从您的身份验证视图控制器到您的提要视图控制器的 segue,并为其提供 segue 标识符 segueFeed

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

    - (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)并通过segue 将它们与其他视图控制器连接。

    【讨论】:

    • 完美!非常感谢!
    • 还有一个问题,当我从我的登录方法(在用户点击登录并登录后调用)调用 performSegueWithIdentifier 时,这有效,但是,当我从 awakeFromNib 调用 performSegueWithIdentifier 栏按钮时项目没有响应??
    • 您是通过编程方式设置栏按钮项目还是在情节提要中指定它们?我用情节提要尝试了它并将它们连接到动作方法,它工作正常。
    • 我在情节提要中使用界面生成器添加了它们。我将范围缩小到,如果我检查了用户登录并在 viewDidAppear 方法中操作了按钮工作的 segue,但是在 awakeFromNib、viewWillAppear 或 viewDidLoad 中执行了 segue,但按钮没有响应。
    • 非常奇怪的行为。我还在情节提要上添加了两个条形按钮并在awakeFromNib 中执行segue,但按钮确实可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 2012-07-30
    • 1970-01-01
    • 2011-07-15
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多