Инициализатор UIBarButtonItem с изображением и заголовком не отображает заголовок

#ios #swift #uibarbuttonitem #uitoolbar

#iOS #swift #uibarbuttonitem #uitoolbar

Вопрос:

Я использую init(title:image:primaryAction:menu:) документацию Apple по UIBarButtonItem на панели инструментов в надежде отобразить кнопку как с изображением, так и с заголовком. Кто-нибудь знает, почему заголовок не отображается? Я не ищу пользовательскую реализацию, которая может добавить UIBarButtonItem с заголовком и изображением. Я много видел в Stackoverflow. Я просто хочу использовать этот инициализатор, если он работает.

У меня есть подкласс UITableViewController, и я добавил этот код в viewDidLoad

 navigationController?.isToolbarHidden = false
let barButtonItem = UIBarButtonItem(title: "New Item", image: UIImage(systemName: "plus.circle.fill"), primaryAction: nil, menu: nil)
toolbarItems = [barButtonItem]
  

Ответ №1:

Я предполагаю, что поскольку public convenience init(title: String? = nil, image: UIImage? = nil, primaryAction: UIAction? = nil, menu: UIMenu? = nil) это convenience инициализация, и тот факт, что нет инициализации, которая инициализируется как заголовком, так и изображением, то одновременное использование обоих не поддерживается. Это просто удобство при использовании primaryAction и menu, а затем с заголовком и изображением.

Ответ №2:

Попробуйте назначить пользовательскую кнопку для вашей кнопки navBar, объявите свою кнопку в своем классе контроллера:

 let myButton = UIButton(type: .system)
  

теперь в viewDidLoad установите пользовательскую кнопку с заголовком и назначьте ее панели навигации:

 myButton.setImage(UIImage(systemName: "square.and.arrow.up"), for: .normal)
myButton.setTitle(" your text", for: .normal)
myButton.sizeToFit()
myButton.addTarget(self, action: #selector(yourFunctionAction), for: .touchUpInside)
navigationItem.rightBarButtonItem = UIBarButtonItem(customView: myButton)
  

Комментарии:

1. Спасибо! Но, как я уже упоминал в своем вопросе, я видел многие из этих ответов в Stackoverflow раньше с пользовательской реализацией, как у вас. В этом нет ничего плохого, но это не мой вопрос. Я хочу понять, почему конкретный инициализатор, предоставленный Apple, не работает.