如何从RootViewController禁用DetailViewController UIBarButtonItem?

时间:2011-02-11 17:17:35

标签: iphone cocoa-touch ios4 uikit ios-4.2

我有一个主表视图。和一个DetailView。单击单元格时,将显示该单元格的DetailView,其中显示该单元格的详细信息。 DetailView下一个和前一个有两个按钮。我想知道如何禁用RootViewcontroller.m中的详细视图按钮。代码如下所示:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    DetailViewController *nextController = [[DetailViewController alloc] init];
    int storyIndex = [indexPath indexAtPosition:[indexPath length] -1];
    nextController = [nextController initWithObjectAtIndex:storyIndex inArray:stories];

    NSString *storyTitle = [[stories objectAtIndex:storyIndex] objectForKey:@"title"];
    nextController.title = @"Details";

    UIBarButtonItem *tempButtonItem = [[[UIBarButtonItem alloc] init] autorelease];
    tempButtonItem.title = @"Back";

    self.navigationItem.backBarButtonItem = tempButtonItem ;

    nextController.sTitle = storyTitle;
    [self.navigationController pushViewController:nextController animated:YES];

    [nextController release];

}

我已在此行之后尝试了nextController.next.enabled = NO和[nextController.next setEnabled:NO]: [self.navigationController pushViewController:nextController animated:YES];

其中next是DetailViewController中的UIBarButtonItem名称。 任何人都可以告诉我如何禁用该按钮。 提前谢谢

1 个答案:

答案 0 :(得分:1)

不会同时加载Viewcontrollers和视图。这意味着当你在你的情况下实例化DetailViewController的对象时,不会绘制视图(如果你正在使用Nib),这是延迟加载概念的一部分。

因此,第一次发送消息setEnabled = NO时,对象将为nil(在Objective C中允许向nil对象发送消息)。

示例:

[nextController setEnabled:NO]等于[nil setEnabled:NO],这肯定不是您想要的。

下一次,除非内存警告和视图被卸载,否则视图将在内存中,对按钮的引用将不再为零,因此第二次调用它时,它将起作用。

并在pushViewController:animate

上方添加代码行

如果要初始化要禁用的按钮,可以将此代码放在viewDidLoad / viewWillAppear中,具体取决于应用程序的上下文。

这只是一种可能的解决方案。


在评论中编辑回复请求:

在DetailviewController的初始化方法中添加:

self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(backToRoot)] autorelease];

- (void)backToRoot {
    [self.navigationController popToRootViewControllerAnimated:YES];
}

并将方法签名添加到头文件中。

对UINavigationController的引用:http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html