我遇到问题,后面的按钮没有显示在SettingsViewController上。导航栏会在按下视图时显示,但不会显示后退按钮。
我在视图控制器中创建它,它不是导航控制器。关于这里实际发生的事情的任何想法或建议。
- (void)viewDidLoad
{
self.title = @"Settings";
}
- (IBAction)showSettingsModal:(id)sender
{
SettingsViewController *settingsViewController = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil];
UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:settingsViewController] autorelease];
[self presentModalViewController:navController animated:YES];
[settingsViewController release];
}
答案 0 :(得分:3)
您正在创建新的导航堆栈。您需要添加自己的“后退”按钮,并将其操作设置为调用VC上的委托方法以关闭它。
更新: 关于在何处以及如何解雇ModalViewControllers似乎存在很多困惑。在大多数情况下,错误的做法是如果您希望父母对该解雇采取行动,则从Modal VC本身调用Dismiss方法。相反,使用委托。这是一个简单的例子:
ModalViewController.h:
@protocol ModalViewControllerDelegate
-(void)dismissMyModalVC;
@end
@interface ModalViewController : UIViewController {
id < ModalViewControllerDelegate > delegate;
}
@property (nonatomic, retain) id < ModalViewControllerDelegate > delegate;
// The rest of your class properties, methods here
ModalViewController.m
@synthesize delegate;
...
// Put in the Method you will be calling from that Back button you created
[delegate dismissMyModalVC];
CallingViewController.h:
#import "ModalViewController.h"
@interface CallingViewController : UIViewController
<ModalViewControllerDelegate>
// Rest of class here
CallingViewController.m:
ModalViewController *mvc = [[ModalViewController alloc] initWithNibName:@"ModalViewController" bundle:nil];
mvc.delegate = self
[self presentModalViewController:mvc animated:YES];
...
// The ModalViewController delegate method
-(void)dismissMyModalVC {
// Dismiss the ModalViewController that we instantiated earlier
[self dismissModalViewControllerAnimated:YES];
这样VC就会从实例化它的控制器中正确地解散。可以修改该委托方法以传递对象(例如,当您完成对用户的记录等时)
答案 1 :(得分:1)
SettingsViewController没有后退按钮,因为它位于堆栈的底部。如果你想要一个按钮来关闭模态对话框,你必须自己添加它。
答案 2 :(得分:1)
你可以试试这个
UIBarButtonItem * backButton = [[UIBarButtonItem alloc]initWithTitle:@"Back"style:UIBarButtonItemStylePlain target:self.navigationItem.backBarButtonItem action:@selector(dismissModalViewControllerAnimated:)];
答案 3 :(得分:0)
您将新控制器显示为模态视图控制器。模态控制器呈现最顶级。你应该:
[self.navigationController pushViewController:navController animated:YES];
将视图控制器推入堆栈,然后您将看到“返回”按钮。
阅读Apple文档,介绍视图控制器: https://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html
编辑没有看到调用视图控制器不是导航控制器的一部分。在这种情况下,您必须手动创建后退按钮,并将其设置为左栏导航项。