2015-12-15 4 views
6

Я был в состоянии создать элемент UIBarButton, который может вернуться программно, используя следующий код:Как программно создать элемент «Назад» UIBarButton в Swift?

func backAction() -> Void {   
     self.navigationController?.popViewControllerAnimated(true) 
    } 
override func viewDidLoad() { 
     super.viewDidLoad() 
    let backButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: self, action: "backAction") 

     self.navigationItem.leftBarButtonItem = backButton 
    } 

Проблема заключается в том, что кнопка назад не левая стрелка, указывающая: enter image description here Есть ли способ чтобы сделать его похожим на обычную кнопку со стрелкой следующим образом: enter image description here

Я также хотел бы знать, есть ли способ сделать названия названий кнопок в качестве заголовка предыдущего контроллера представления, если это возможно.

Thanks

+0

Как вы перемещаетесь в видимый контроллер? Это presentViewController или pushViewController? – silentBeep

+0

Это через «настоящее модно», а не через навигационный контроллер –

ответ

20

Ниже приведен коду, с помощью UIButton с изображением вы можете добавить его в качестве customView для UIBarButtonItem

override func viewDidLoad() { 
    super.viewDidLoad() 
    var backbutton = UIButton(type: .Custom) 
    backbutton.setImage(UIImage(named: "BackButton.png"), forState: .Normal) // Image can be downloaded from here below link 
    backbutton.setTitle("Back", forState: .Normal) 
    backbutton.setTitleColor(backbutton.tintColor, forState: .Normal) // You can change the TitleColor 
    backbutton.addTarget(self, action: "backAction", forControlEvents: .TouchUpInside) 

    self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: backbutton) 
} 

func backAction() -> Void {   
    self.navigationController?.popViewControllerAnimated(true) 
} 

BackButton.pngDownload Link

Для установки заголовка подзаголовка с заголовком предыдущего заголовка вы должны передать заголовок как строку при представлении элемента управления er внести изменения в код выше

var titleStrFromPreviousController: String // This value has to be set from previous controller while presenting modal controller 
backbutton.setTitle(titleStrFromPreviousController, forState: .Normal) 

Это может помочь.

Swift 3

override func viewDidLoad() { 
    super.viewDidLoad() 

    addBackButton() 
} 

func addBackButton() { 
    let backButton = UIButton(type: .custom) 
    backButton.setImage(UIImage(named: "BackButton.png"), for: .normal) // Image can be downloaded from here below link 
    backButton.setTitle("Back", for: .normal) 
    backButton.setTitleColor(backButton.tintColor, for: .normal) // You can change the TitleColor 
    backButton.addTarget(self, action: #selector(self.backAction(_:)), for: .touchUpInside) 

    self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: backButton) 
} 

@IBAction func backAction(_ sender: UIButton) { 
    let _ = self.navigationController?.popViewController(animated: true) 
} 
+0

изображение отображается на большом –

+0

вам следует следовать https://developer.apple.com/ios/human-interface-guidelines/icons-and-images/custom-icons/ для размера изображения – silentBeep

3

Вы можете сделать, добавив свое представление в контроллер навигации. Вот изображение, показывающее, как сделать это: navigationController

Надеется, что это помогает: D

+0

кнопка «Назад» не появляется? Должен ли я добавить его вручную? –

+0

Должно появиться по умолчанию – Pixele9

0

Первый ответ отлично работает, однако изображение является слишком большим, чтобы использовать предварительный просмотр и масштабировать его до ширины: 13 и высота: 22, а также установить свой режим рендеринга до .alwaysTemplate и измените оттенок UIButton на белый, а также добавьте пробелы перед строкой: «Назад». Это приведет к тому, что тихо, похожее на кнопку панели навигации, изображение может быть лучше с точки зрения размера и размещения.

Отредактированный код:

 func addBackButton() { 


      let backButtonImage = UIImage(named: "BackButton.png")?.withRenderingMode(.alwaysTemplate) 

      let backButton = UIButton(type: .custom) 
      backButton.setImage(backButtonImage, for: .normal) 
      backButton.tintColor = .white 
      backButton.setTitle(" Back", for: .normal) 
      backButton.setTitleColor(.white, for: .normal) 
      backButton.addTarget(self, action: #selector(self.backAction(_:)), for: .touchUpInside) 

      self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: backButton) 


}