2011-02-26 52 views
0

我使用导航栏和表格在IB中创建了一个视图。在导航栏上放两个按钮,取消并完成。我用这个观点就像一个模式的看法有:访问模态视图的导航栏按钮的正确方法是什么?

[self presentModalViewController:controller animated:YES]; 

我的问题是,当我使用:

[self.navigationItem.rightBarButtonItem setEnabled:YES]; 

,使右侧的按钮。它不起作用。

我有设置委托吗?我必须做什么代码段落?如果我为右按钮创建一个IBOutlet,并使用[doneButton setEnabled:YES],它会起作用,但我认为这不是正确的方法。

回答

0

代表与您的问题无关。

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

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

或者从您的视图中删除的导航栏,以这种方式提出您的视图控制器...

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

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

+0

什么是两者之间的“更好”的解决方案?我将navbar直接放入视图中,并将按钮连接到一个插座,并且我知道这是否是一种不好的代码编写方式。 – Sefran2 2011-02-26 11:22:59

+0

这取决于。一切都是可能的,都是关于你的感受。没有一条正确的道路。如果您只有一个视图控制器,请按照您的方式进行。如果你有更多的视图控制器,更复杂的层次等,最好使用navigationItem。它更干净,可扩展,可重用,... – robertvojta 2011-02-26 12:22:40

2

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

  • 创建包含导航控制器对象XIB文件,并设置其根视图控制器是您的详细视图控制器您希望通过导航栏进行模态显示。

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

  • 您的详细视图控制器将需要在一个单独的.xib文件

  • 创建只存在持有导航控制器IBOutlet中,并将其设置为是文件的所有者对象,“加载器”对象厦门国际银行是:

@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

确保导航控制器对象conntected了“装载机”对象的navVC出口,并确保栏按钮项目连接到您的详细视图控制器的期望IBActions。

然后你目前使用此代码这件事:

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