UINavigationBar,后退按钮和dismissModalViewController

时间:2013-07-31 21:51:59

标签: objective-c uinavigationbar uibarbuttonitem modalviewcontroller

我有一个基于导航的应用,因此所有视图默认都有一个顶部导航栏。我已经到达了一个页面,默认情况下不会出于任何原因显示后退按钮,我需要以编程方式添加一个。不幸的是,后退按钮不会按预期消除模态视图。

我通过以下方式加载有问题的视图:

-(IBAction) linkPress:(id)sender
{
    potentialUrl = [[NSURL alloc] initWithString:((Button*)sender).emailContent];

    webViewInst = [[WebView alloc] initWithNibName:@"WebView" bundle:nil url:potentialUrl];

    NSString *deviceType = [UIDevice currentDevice].model;
    if([deviceType isEqualToString:@"iPad"] || [deviceType isEqualToString:@"iPad Simulator"]){
        [self presentModalViewController:webViewInst animated:YES];
    }
    else {
        [self.navigationController pushViewController:webViewInst animated:YES];
    }    
}

我通过以下方式添加了后退按钮:

UIBarButtonItem *MKbackBtn = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backButton:)]; 
[self.navigationItem setLeftBarButtonItem:MKbackBtn];

后退按钮应该删除视图并返回上一个视图的操作:

-(IBAction)backButton:(id)sender
{
    UIViewController* parent = [self parentViewController];
    if(parent==nil) {
        parent = [self presentingViewController];
    }
    [parent dismissModalViewControllerAnimated:YES];
}

如果另一组眼睛可以查看这些代码,并试图辨别我犯了什么错误,那将非常感激!我也非常愿意提供更多的信息/代码。

谢谢!

2 个答案:

答案 0 :(得分:1)

你正在调用dismissModalViewControllerAnimated,但根据你上面的代码,它有可能不会被呈现为模态,而是被推送到navStack,在这种情况下,dismissModalViewControllerAnimated实际上不会忽略它。相反,你需要做popViewController等。你应该围绕演示方式。你能否证实这不是问题的一部分?

另外,我认为你会打电话给[self dismissModalViewController...]而不是parent

答案 1 :(得分:0)

以模态方式显示视图控制器不会将其包含在导航控制器的堆栈中。您必须提供自己的UI机制来关闭模态视图。在我看来,你解决模态视图控制器的解决方案应该主要起作用 - 尽管我认为你需要的只是backButton:中的这一行:

[self dismissModalViewControllerAnimated:YES];