0

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

[self presentModalViewController:controller animated:YES];

我的问题是当我使用:

[self.navigationItem.rightBarButtonItem setEnabled:YES];

启用右键。它不起作用。

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

4

2 回答 2

2

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

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

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

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

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

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

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

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

在此处输入图像描述

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

然后,您使用以下代码呈现整个事情:

Loader *loader = [[[Loader alloc] init] autorelease];
[[NSBundle mainBundle] loadNibNamed:@"ModalVC" owner:loader options:nil];
[self presentModalViewController:loader.navVC animated:YES];
于 2011-02-26T11:16:05.733 回答
0

代表与您的问题无关。

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

将您的按钮连接到代码中的插座并直接访问它们。

或者从您的视图中删除导航栏并以这种方式呈现您的视图控制器......

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

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

于 2011-02-26T09:59:07.253 回答