2015-02-27 3 views
0

Мне нужна кнопка возврата навигации, всегда появляется специальный UIViewController.set navigation backBarButtonItem перейти к определенному UIViewController в Swift

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 не вызывается. Пожалуйста помоги.

спасибо.

ответ

0

Вот вам пример.

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) 
    } 
} 

EDIT

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

enter image description here

HERE является для Вас примером для получения дополнительной справки.

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

+0

где я должен добавить идентификатор для ViewController? Таким образом, как я могу добавить изображение для кнопки «Назад»? – Chongzl

+0

Я обновил код, проверяю его. –

+0

Я опробовал ваш код, он сработал. Но у меня есть другой вопрос: у меня около 20 viewcontrollers с пользовательской кнопкой «назад», поэтому мне нужно изменить коды на ваши. Как я могу нажать правильный вид? – Chongzl

0

self.navigationController? .popToViewController (ServiziVC(), анимированный: 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 «s, как описано здесь: UINavigationController and back button action