[英]Replace navigation bar cancel button with back button
我在导航控制器中嵌入了一个表格视图控制器。 表格单元都是静态的,选择其中任何一个单元都会切换到另一个表格视图。 当发生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中没有任何事情要做。
这是连接检查器显示的内容
这是“ Bar Button Item-Back”的连接
默认情况下,系统提供的后退按钮应为左栏按钮,而无需执行任何操作(使用代码或IB)。
在“连接”检查器中删除与backBarButton的连接。 从IB中的导航栏中删除后退按钮。 移除代码中后杠按钮的出口。 运行您的应用程序,您应该会看到免费提供的后退按钮。
如果没有默认的后退按钮不起作用,请自定义代码
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:myBackImage style: UIBarButtonItemStylePlain target:self action:someAction];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];
为什么您要在didselectrow中执行序号,而不是仅按ViewController?
尝试[self.navigationController pushViewController:YOURVIEWCONTROLLER];
这将确保您有一个后退按钮。 另外,您必须使用类似的segue,确保对下一个控制器使用推送segue。 看起来您在第二个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";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.