如何手动向UINavigationBar添加“后退”按钮?

时间:2011-03-08 01:03:57

标签: iphone objective-c xcode uinavigationbar

我希望导航栏有一个返回到最后一页的后退按钮,即使最后一页没有导航栏。如何插入后退按钮,并控制用户按下后会发生什么?

4 个答案:

答案 0 :(得分:1)

我想添加一个答案,但是不幸的是,我在Swift中只有正确的答案。我将在这里为遇到此问题的任何人在Swift中提供答案。假设您想在导航栏中添加“后退按钮”以转到最后一页。请执行以下操作:

    let button = UIBarButtonItem.init()
    button.title = "BACK"
    let attributes : [NSAttributedStringKey : Any] = [NSAttributedStringKey(rawValue: NSAttributedStringKey.font.rawValue): UIFont.systemFont(ofSize: 15.0)]
    button.setTitleTextAttributes(attributes, for: .normal)
    button.target = self
    button.action = #selector(self.goBack)
    self.navigationItem.setLeftBarButton(button, animated: false)

然后,定义一个函数(用于上面按钮操作的选择器):

@objc func goBack() {
    self.performSegue(withIdentifier: "myUnwindSegue", sender: AnyObject.self) 
}

请注意,这里我使用了轻松的序列。要使用轻松的搜索,请参阅here或如有任何疑问,请在下面评论。初次使用segue时可能会有些棘手,但之后它们很棒。还要注意,当您说“最后一页”时,我假设您是说一个视图已经添加到视图层次结构中。

答案 1 :(得分:0)

您需要将Interface Builder中的按钮链接到单击按钮时要调用的方法。该方法应如下- (IBAction)backAction。方法的名称取决于您,但您必须将返回类型声明为IBAction,以便“接口”构建器知道可以将按钮链接到它。

答案 2 :(得分:0)

导航控制器无需导航栏即可由导航控制器管理。而不是试图伪造后退按钮,使用导航控制器来管理两个视图控制器,并让第一个控制器隐藏导航栏。例如,您可以添加以下内容:

[self.navigationController setNavigationBarHidden:YES animated:YES];

到控制器的-viewDidAppear方法。为第二个控制器做类似的事情,为隐藏参数传递NO,以便再次显示它。

在一般情况下,视图控制器可以使用这样的代码向导航栏添加一个后退按钮(警告:从内存中输入未经测试的代码,但应该让你开始):

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

点击按钮时,该按钮会将其动作(someAction)发送到目标(自我)。

答案 3 :(得分:-2)

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

[button addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside];

[button.titleLabel setFont:[UIFont boldSystemFontOfSize:11.0]];

[button setBackgroundImage:[UIImage imageNamed:@"back_norm.png"] forState:UIControlStateNormal];

[button setBackgroundImage:[UIImage imageNamed:@"back_click.png"] forState:UIControlStateSelected];

[button setBackgroundImage:[UIImage imageNamed:@"back_click.png"] forState:UIControlStateHighlighted];

[button setTitle:@" Back" forState:UIControlStateNormal];

[button setTitle:@" Back" forState:UIControlStateSelected];

[button setTitle:@" Back" forState:UIControlStateHighlighted];

button.frame = CGRectMake(0, 0, 48, 30);

UIBarButtonItem *back = [[UIBarButtonItem alloc] initWithCustomView:button];

self.navigationItem.leftBarButtonItem = back; 

[button release];

[back release];