在IB中设置UINavigationController及其RootViewController的正确方法

时间:2011-11-25 10:28:46

标签: objective-c ios ipad uinavigationcontroller interface-builder

我的iPad App中有以下结构:

  • 应用
    • UINavigationController(向顶栏提供UIBarButton等)
      • 初始登录屏幕
      • 第二次登录屏幕

我不确定我现在应该如何在Interfacebuilder中正确设置它。我的猜测是我创建了两个ViewControllers:

  1. LoginVC1 :(这个也应该包含NavigationController,因为它是两个屏幕中的第一个)
  2. LoginVC2:基于来自LoginVC1的一些委托回调,我的应用程序将推送到此ViewController。
  3. 这是我在IB中的LoginVC1LoginVC1 http://k.minus.com/jpamEAFkBjpKT.png

    当我以模态方式呈现它时,看起来这不是我想要的: Result http://k.minus.com/jHAYRnY788jFt.png

    结果:

    • 也没有显示ViewController的标题,也没有显示取消按钮
    • 尽管我在IB中的观点
    • ,但该视图似乎是空的
    • 我已将UINavigationController的演示模式设置为FormSheet,因为它全屏显示,所以也会被忽略。

    我做错了什么?

1 个答案:

答案 0 :(得分:1)

  

Kjuly我只是使用presentModalViewController来显示对话框,但是   因为我的UINavigationControler包含一个UIViewController(参见   nib-screen),我会假设这个ViewController在显示的时候   显示模态。

并不总是贝西。将它添加到UINavigationController Hierarchy不会添加为rootViewController。这必须在这样的代码中完成:

UIViewController *rootViewController = [[[ExamplesViewController alloc] init] autorelease];
UINavigationController * navController = [[UINavigationController alloc] initWithRootViewController:rootViewController];

另外,检查您是否以模态方式呈现NavigationController,而不是ViewController。

要解决NavigationBar标题问题,请尝试在

中设置self.title属性

-(void)viewDidload方法,看看是否有效。如果没有,请尝试self.//instance of UINavigationController//.navigationBar.title = @"string"

至于其他没有出现的按钮,我的猜测是如果在代码中设置根控制器没有帮助,那么你只在.h中引用它们,而不是实例化它们。所以要么在.h:

中调用这样的东西
//.h
@implementation ExampleViewController: UIViewController <UITextFieldDelegate> {

     IBOutlet UIBarButtonItem * CancelButton;
     IBOutlet UITextField * usernameField;
     IBOutlet UITextField * passwordField;
     IBOutlet UIButton * loginButton;
}
@property (nonatomic, retain) IBOutlet UIBarButtonItem * CancelButton;
@property (nonatomic, retain) IBOutlet UITextField * usernameField;
@property (nonatomic, retain) IBOutlet UITextField * passwordField;
@property (nonatomic, retain) IBOutlet UIButton * loginButton;

然后连接XIB中的插座,或者使用以下命令实例化.m中的按钮

//.m 

-(void)viewDidLoad {

//do stuff
    CancelButton = [[[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStyleDone target:self action:@selector(dismissSelf)]autorelease];

//do more stuff

}