iPhone导航后退按钮

时间:2012-02-28 13:49:06

标签: iphone ios ios4 iphone-sdk-3.0

我遇到问题,后面的按钮没有显示在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];    
}

4 个答案:

答案 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

编辑没有看到调用视图控制器不是导航控制器的一部分。在这种情况下,您必须手动创建后退按钮,并将其设置为左栏导航项。