UINavigationBar从另一个视图获取按钮

时间:2010-03-19 18:57:36

标签: iphone objective-c cocoa-touch button uinavigationbar

我有三个视图,Splash,Login和List。

从Splash我只是等待,然后推送登录视图,隐藏导航栏。

在登录中我显示NavigationBar,隐藏BackButton1并添加一个新的RightButton1,然后检查是否设置了Settings.bundle“login”和“pass”。如果是这样,我推送列表视图。否则我会留在登录视图中等待用户填写表单并按下按钮。

在列表视图中,我添加了一个新的RightButton2和一个新的BackButton2。

问题是如果Settings.bundle数据不为null,并且在Login View中我快速推送列表视图,RightButton1出现在列表视图中,或者根本没有按钮出现,或者只显示BackButton2 ... < / p>

最奇怪的是,一切都很好,突然间它开始变得混乱。

登录视图:

    // Making the Navigation Bar Visible
 [self.navigationController setNavigationBarHidden:NO animated:NO];

  // Hiding the Back Button in THIS view (Login)
  [self.navigationItem setHidesBackButton:YES];

  // Inserting the Logout Button for the Next View (List)
  UIBarButtonItem *backButton = [[UIBarButtonItem alloc] 
            initWithTitle:@"Logout" 
            style:UIBarButtonItemStylePlain 
            target:nil 
            action:nil];
  self.navigationItem.backBarButtonItem = backButton;
  [backButton release];

  UIBarButtonItem* newAccountButton = [[UIBarButtonItem alloc] 
            initWithTitle:@"New Account" 
            style:UIBarButtonItemStylePlain 
            target:self 
            action:@selector(newAccountButtonPressed)];  
  self.navigationItem.rightBarButtonItem = newAccountButton;
  [newAccountButton release];

列表视图

     // Making the Navigation Bar Visible
 [self.navigationController setNavigationBarHidden:NO animated:NO];

 UIBarButtonItem* aboutButton = [[UIBarButtonItem alloc] 
         initWithTitle:@"About" 
         style:UIBarButtonItemStylePlain 
         target:self 
         action:@selector(aboutButtonPressed)];  


 self.navigationItem.rightBarButtonItem = aboutButton;
 [aboutButton release];

有什么想法吗?

更新:我已经测试了更多,在我看来,当我快速从登录到列表时,NavigationBar没有足够的时间添加按钮并添加按钮和条形图在错误的顺序。我已经使用performSelector使登录视图等到推送列表,如果延迟类似于2秒,则everthing正常,但如果它像0.1秒那样问题再次出现。

我正在使用viewDidLoad ..如果LoginBar中的所有东西都已正常,我怎样才能使Login View只推送List View?换句话说,如何在没有固定时序延迟的情况下使推送等待所有先前的命令?

1 个答案:

答案 0 :(得分:0)

要考虑的一件事是将启动画面设置为模态视图控制器,因为您必须执行大量额外工作才能使其不显示在导航层次结构中。只需使用导航控制器的presentModalViewController:animated:方法即可。

制作登录视图模式也是有意义的。

更好的是,使用default.png作为启动画面,然后弹出一个模态视图控制器进行登录。假设您的启动画面是静态的。