用后退按钮替换导航栏取消按钮

时间:2013-09-30 02:02:26

标签: ios objective-c uinavigationcontroller uibarbuttonitem

我在导航控制器中嵌入了一个表视图控制器。表格单元格都是静态的,选择其中任何一个都将转换为另一个表格视图。当发生segue时,导航栏会显示新视图的“取消”按钮,而不是“后退”按钮。

我可以在代码中添加一个后退按钮,如

- (void)viewDidLoad
{
    self.navigationItem.backBarButtonItem =
        [[UIBarButtonItem alloc] initWithTitle:@"Back"
                                         style:UIBarButtonSystemItemCancel
                                        target:nil
                                        action:nil];
    self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem;
}

然后后退按钮将是一个矩形形状,而不是默认的后退按钮形状,左边缘有一个角度。如何简单地将取消按钮更改为系统后退按钮?

这是我从表格单元格到下一个表格视图的代码

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

    switch (indexPath.row) {
        case 0:
            [self performSegueWithIdentifier:@"goToSecondTable" sender:self.tableView];
            break;
        /* and perform segue for other rows */
        default:
            break;
    }
}

在prepareForSegue中没有任何事可做。

以下是连接检查员显示的内容

connections inspector

以下是“Bar Button Item - Back”的连接

Bar Button Item - Back

3 个答案:

答案 0 :(得分:0)

默认情况下,系统提供的后退按钮应为左栏按钮项,无需执行任何操作(代码或IB中)。

删除Connections检查器中与backBarButton的连接。从IB中的导航栏中删除后栏按钮。删除代码中后栏按钮的插座。运行你的应用程序,你应该看到免费提供的后栏按钮。

答案 1 :(得分:0)

如果没有默认后退按钮不起作用,请自定义代码

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:myBackImage style: UIBarButtonItemStylePlain target:self action:someAction];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];

答案 2 :(得分:0)

为什么你在didselectrow中执行segue而不是仅仅按下viewcontroller?

尝试[self.navigationController pushViewController:YOURVIEWCONTROLLER];

这将确保你有一个后退按钮。此外,你必须使用这样的segue,确保你正在使用push segue到你的下一个控制器。看起来您在第二个viewController中创建了自己的后退按钮。您不需要创建一个,因为将使用前一个viewcontroller的标题为您创建一个。您可以通过在推送之前更改上一个viewcontroller中的self.title = @“Back”来确保它返回。

代码:

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

    switch (indexPath.row) {
        case 0:
            self.title = @"Back";
            [self.navigationController pushViewController:SECONDVC];
            break;
        /* and perform segue for other rows */
        default:
            break;
    }
}

并在viewWillAppear中:

 - (void)viewWillAppear:(BOOL)animated
{
   [super viewWillAppear:animated];
   self.title = @"Whatever you want";
}