向UINavigationController添加一个正确的“完成”按钮(UIBarButtonItem)

6
我看到这里有一个类似的问题:如何向UINavigationController添加右侧按钮?(还有其他一些),但这并不是我想做的,也没有解决我的问题。
本质上,我创建了一个名为WebViewViewController的UIViewController,并在其中放置了一个UIWebView,将使用presentModalViewController显示它。本质上,它是一个迷你网络浏览器,用于显示网页,同时使用户保持在应用程序中,而不是启动Safari。
viewController执行以下操作以显示它...“完成”按钮旨在提供关闭浏览器的位置。
-(IBAction)visitFacebook {
    WebViewViewController *rootController = [[WebViewViewController alloc] init];
    rootController.webURL = @"http://www.facebook.com/";
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:rootController];
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc ] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(done:)];

    [navigationController.navigationItem setRightBarButtonItem:doneButton animated:YES];
    [navigationController.navigationItem setTitle:@"Facebook"];

    if (rootController) {
        [self presentModalViewController:navigationController animated:YES];
    }

    [doneButton release];
    [rootController release];
}

很遗憾,“完成”按钮没有显示出来。有什么想法,我是哪里做错了吗?
3个回答

10

尝试使用以下代码:

-(IBAction)visitFacebook{
WebViewViewController *rootController = [[WebViewViewController alloc] init];
rootController.webURL = @"http://www.facebook.com/";
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:rootController];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc ] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(done:)];

 rootController.navigationItem.rightBarButtonItem = anotherButton;

[navigationController.navigationItem setTitle:@"Facebook"];

if (rootController) {
    [self presentModalViewController:navigationController animated:YES];
}

[doneButton release];
[rootController release];

}

非常感谢。关键是,正如我所想的那样,我的理解不足。 - JMattos
4
关键在于所讨论的 navigationItem 是根控制器的属性,而不是 navigationController 的属性!正确写法: rootController.navigationItem.rightBarButtonItem = doneButton;错误写法: [navigationController.navigationItem setRightBarButtonItem:doneButton animated:YES]; - JMattos
如果这个回答帮助解决了你的问题,请考虑将其标记为答案。 - Hemanshu Bhojak

6
也许您更需要这样的内容:
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
                                      style:UIBarButtonItemStyleDone target:self 
                                     action:@selector(dismissModalViewControllerAnimated:)];

嗯...同样的问题。我想我可能漏掉了一些更大的东西。我正在阅读http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/NavigationControllers/NavigationControllers.html,但是我没有找到我的解决方案。 - JMattos

5
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Done"
        style:UIBarButtonItemStylePlain target:self action:@selector(done:)];

这一行代码可以为我显示“完成”按钮。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接