访问模态视图的导航按钮的正确方法是什么?

时间:2011-02-26 09:06:49

标签: iphone uinavigationbar modal-view

我在IB中创建了一个带有导航栏和表格的视图。在导航栏上我放了两个按钮,取消并完成。我将此视图用作模态视图

[self presentModalViewController:controller animated:YES];

我的问题是我何时使用:

[self.navigationItem.rightBarButtonItem setEnabled:YES];

启用右键。它不起作用。

我是否需要设置代理人?我必须做什么代码段落?如果我为右键创建一个IBOutlet并使用[doneButton setEnabled:YES],它会起作用,但我认为这不是正确的方法。

2 个答案:

答案 0 :(得分:2)

为了在界面构建器中的模态视图控制器上放置导航栏(并设置调用详细视图控制器中操作的栏按钮项),您需要经历一个间接级别(您的导航栏将是在一个.xib中,详细信息视图的详细信息将在不同的xib中:

  • 创建一个包含导航控制器对象的xib文件,并将其根视图控制器设置为您想要使用导航栏以模态方式显示的详细视图控制器。

  • 将条形按钮项添加到详细控制器的导航栏,并将它们连接到详细视图控制器对象中的IBActions。

  • 您的详细信息视图控制器需要位于单独的.xib文件中

  • 创建一个“加载器”对象,该对象仅用于存放导航控制器iboutlet,并将其设置为该xib的File的Owner对象:

@interface Loader : NSObject
@property (nonatomic, retain) IBOutlet UINavigationController *navVC;
@end

@implementation Loader
@synthesize navVC;
- (void) dealloc
{
    [navVC release];
    [super dealloc];
}
@end

包含导航控制器的xib文件如下所示:

enter image description here

确保导航控制器对象连接到“Loader”对象的navVC插座,并确保条形按钮项目连接到详细视图控制器所需的IBActions。

然后使用此代码展示整件事:

Loader *loader = [[[Loader alloc] init] autorelease];
[[NSBundle mainBundle] loadNibNamed:@"ModalVC" owner:loader options:nil];
[self presentModalViewController:loader.navVC animated:YES];

答案 1 :(得分:0)

代表与您的问题无关。

您可能直接将导航栏放入视图中。因此像self.navigationItem这样的东西不起作用。你有两个选择......

将按钮连接到代码中的插座,然后直接访问它们。

或者从视图中删除导航栏并以这种方式显示视图控制器......

MyViewController *vc = [[MyViewController alloc] initWith...];
UINavigationController *navCon = [[UINavigationController alloc] initWithRootViewController:vc];
[vc release];
[self presentModalViewController:navCon animated:YES];
[navCon release];

...现在您可以通过navigationItem访问左/右按钮。

相关问题