Установить навигацию backBarButtonItem для перехода к определенному UIViewController в Swift

Мне нужно, чтобы кнопка навигации назад всегда высвечивала определенный UIViewController.

override func viewDidLoad() {
    super.viewDidLoad()

    //set title image
    var logoImage:UIImage = UIImage(named: "barra")!
    var logoImageView : UIImageView = UIImageView(image: logoImage)
    logoImageView.frame = CGRectMake(0, 0, 320, 44)
    logoImageView.contentMode = .ScaleAspectFit
    logoImageView.contentMode = UIViewContentMode.Center
    logoImageView.clipsToBounds = true
    self.navigationItem.titleView = logoImageView

    //set back image
    var backImage:UIImage = UIImage(named: "freccia")!
    backImage = backImage.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
    self.navigationItem.backBarButtonItem = UIBarButtonItem(title:"", style: .Plain,target: self, action: "goToServizi:")
    self.navigationController!.navigationBar.backIndicatorImage = backImage
    self.navigationController!.navigationBar.backIndicatorTransitionMaskImage = backImage

    //set menu image
    var menuImage:UIImage = UIImage(named: "menu")!
    menuImage = menuImage.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
    self.navigationItem.rightBarButtonItem?.image = menuImage

}

func goToServizi(sender: UIBarButtonItem)
{
    self.navigationController?.popToViewController(ServiziVC(), animated: true)// here I add a breakpoint, but it is never executed.
}

ServiziVC UIViewController, который мне нужно показывать каждый раз, когда я нажимаю кнопку "Назад".

Я не могу понять почему goToServizi func не называется. Пожалуйста помоги.

Спасибо.

2 ответа

Решение

Вот пример для вас.

import UIKit

class SecondViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    //Customise your barButton Like this
    var backImage:UIImage = UIImage(named: "freccia")!
    backImage = backImage.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
    var backButton = UIBarButtonItem(image: backImage, style: UIBarButtonItemStyle.Bordered, target: self, action: "goToThird")
    self.navigationItem.leftBarButtonItem = backButton
}

func goToThird(){

    //Initiate newViewController this way
    let ThirdView = self.storyboard?.instantiateViewControllerWithIdentifier("ThirdViewController") as ThirdViewController

    self.navigationController?.pushViewController(ThirdView, animated: true)
    }
}

РЕДАКТИРОВАТЬ

Нажмите на ViewController, который вы хотите запустить с идентификатором, и вы можете найти StoryBoard ID в Identity Inspector, как показано на рисунке ниже.

введите описание изображения здесь

Вот пример для вас, чтобы узнать больше.

Измените код в соответствии с вашими потребностями. Может быть, это поможет вам.

self.navigationController?.popToViewController(ServiziVC(), animated: true) Вы не можете настроить действие кнопки "Назад" таким образом. Это работает:

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.hidesBackButton = true;
    var backImage:UIImage = UIImage(named: "freccia")!
    backImage = backImage.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
    var fakeBackButton = UIBarButtonItem(image: backImage, style: UIBarButtonItemStyle.Bordered, target: self, action: "goToServizi:")
    self.navigationItem.leftBarButtonItem = fakeBackButton;
}

func goToServizi(sender: UIBarButtonItem)
{
    self.navigationController?.popToViewController(ServiziVC(), animated: true)
}

В качестве альтернативы, вы можете переопределить UINavigationControllerметод делегата, как описано здесь: UINavigationController и действие кнопки возврата

Другие вопросы по тегам