Как установить заголовок для UIBarButtonItem?

Я начинающий разработчик iPhone.

Как я могу программно установить заголовок для UIBarButtonItem?

Мой код следующий:

self.navigationItem.rightBarButtonItems =
    UIBarButtonItem(
        barButtonSystemItem: .Cancel, target: self,
        action: "barButtonItemClicked:")

@IBAction func barButtonItemClicked(sender: UIBarButtonItem) {
    //print something
}

Ответы

Ответ 1

Используйте другой инициализатор, который позволяет указать заголовок:

UIBarButtonItem(title: "title", style: .Plain, target: self, action: "barButtonItemClicked:")

Обновление Swift 3.1

UIBarButtonItem(title: "title", style: .plain, target: self, action: #selector(barButtonItemClicked))

Ответ 2

Ответ Swift 2

Вы можете просто добавить следующее к viewDidLoad:

// Some text
self.barButtonItemClicked.title = "Right Button!"

ИЛИ

// A Unicode Gear Symbol
// See: http://graphemica.com/%E2%9A%99
self.barButtonItemClicked.title = "\u{2699}"

В коде ViewController.Swift ниже будет указано имя barButtonItemClicked, которое вы использовали. Я использовал UIBarButtonItem, чтобы показать, как установить заголовок. Но тривиально адаптировать его для функции.

import UIKit

class ViewController: UIViewController {

    // Please make sure the line below is properly connected to your Storyboard!
    @IBOutlet weak var barButtonItemClicked: UIBarButtonItem!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

       // Set the text of the NavBarButtonItem Title  
       self.barButtonItemClicked.title = "Right Button!"

       // Gear Icon
       // self.barButtonItemClicked.title = "\u{2699}"

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

Ответ 3

В моем случае я хотел переключиться между Edit | Done. Однако я не мог использовать leftBarButtonItem, потому что у меня уже был другой UIBarButtonItem.

Я сделал следующее:

1- Создать @IBOutlet weak var edit: UIBarButtonItem!

2- Затем переменная для сохранения состояния: var isEditingMode = false

3 Теперь в viewDidLoad:

override func viewDidLoad() {
    …
    self.edit.action = #selector(self.toogleEditor(_:))
    self.edit.title = "Edit"
    self.setEditing(isEditingMode, animated: true)
    …
}

Я инициализирую селектор edit.action моей пользовательской функции toogleEditor. Я хочу иметь возможность изменять заголовок всякий раз, когда происходит действие.

4- Создайте IBAction:

@IBAction func toogleEditor(sender: AnyObject) {

    if isEditingMode
    {
        isEditingMode = false
        self.edit.title = "Edit"
    }
    else
    {
        isEditingMode = true
        self.edit.title = "Done"
    }
    self.setEditing(isEditingMode, animated: true)
}

Эта функция запускается каждый раз, когда пользователь нажимает кнопку UIBarItemButton.   Единственное, что нужно сделать, это использовать setEditing(…), чтобы изменить поведение UITableViewController.

Ответ 4

из документов

init(title title: String?,
 style style: UIBarButtonItemStyle,
target target: AnyObject?,
action action: Selector)