У меня есть три контроллера вида, все с двумя кнопками, каждый с правой и левой сторон панели навигации, как показано ниже на одном из них.Программный выход из UIBarButtonItem
Я программно создавать эти кнопки, и вместо того, чтобы писать код в каждом соответствующем контроллере представления (VC) Я решил написать класс Helper, который создает кнопку.
// Note: I am using FontAwesome as a third-party library.
class Helper: NSObject {
static func loadNavBarItems(vc: UIViewController) {
let profileButton = UIBarButtonItem()
let addButton = UIBarButtonItem()
let attributes = [NSFontAttributeName: UIFont.fontAwesome(ofSize: 20)] as [String: Any]
profileButton.setTitleTextAttributes(attributes, for: .normal)
addButton.setTitleTextAttributes(attributes, for: .normal)
profileButton.title = String.fontAwesomeIcon(name: .userCircle)
addButton.title = String.fontAwesomeIcon(name: .plus)
vc.navigationItem.leftBarButtonItem = profileButton
vc.navigationItem.rightBarButtonItem = addButton
}
func segueToProfile(vc: UIViewController) { // I need help here. }
}
Я тогда называть Helper.loadNavBarItems(vc: self)
от каждого ВК viewDidLoad()
.
То, что я пытаюсь сделать сейчас, - вызвать таймер при нажатии одной из кнопок (предположим, что это кнопка профиля). Итак, мне нужно определить profile.action
. Итак, в классе Helper мне нужно написать функцию segueToProfile
, которая принимает просмотр Contoller (vc
) и запускает performSegueWithIdentifier
.
Проблема заключается в том, что я не совсем понимаю, как передавать различные типы параметров с помощью селекторов, и я могу быть плохой в Googling, но я не могу найти какие-либо вопросы, которые достаточно близки, чтобы мои для меня, чтобы понять, как добиться этого.
Большое спасибо за вашу помощь.
Для справки, this is the structure of my Storyboard.
EDIT: Как показано на скриншоте структуры раскадровки, я уже создал segue от каждого из трех контроллеров представления до контроллера представления назначения.
Какие параметры можно выбрать с помощью селектора, который вы хотите отправить? Также в вашем раскадровке вы представляете навигационный контроллер. Таким образом, вы должны понимать, что destinationController будет NavigationController, а не ViewCotnroller. Другое дело, что, вероятно, вы должны создать расширение для UIViewController и заменить весь этот код создания и назначения BarButtons в него. Таким образом, вы избегаете пропускать параметр UIViewController в 'loadNavBarItems' func –
@noir_eagle Спасибо, но моя проблема заключается в понимании действий и селекторов UIBarButtonItem. Я пытаюсь вызвать segue, когда один из UIBarButtonItems прослушивается, и я пытаюсь понять, как передавать параметры в селектор при использовании 'profileButton.action' –
Этот навигационный контроллер с этими кнопками на каждой странице ? Или только один ViewController? –