Как мне подключить кнопку в UINavigationBar?
-
11-09-2019 - |
Вопрос
Я уронил UINavigationBar
на форму XIB.Затем я уронил UIButton
на бланке (не на UINavigationBar
).Я изменил тип на InfoLight
(чтобы это выглядело как Информационный символ).
Затем я перетащил UIButton на UINavigationBar
и установите, чтобы это была нужная кнопка.Это волшебным образом меняет тип с UIButton
Для UIButtonBarItem
в результате перетаскивания.
Почему я просто не потащил UIButton
на UINavigationBar
с чего начать?Потому что, как только кнопка появится, Interface Builder не позволит вам изменить тип на InfoLight
по какой бы то ни было причине.
В соседнем файле .h я создал объявление для IBAction
- (IBAction) btnInfoClick;
Затем в файле .m я написал реализацию:
- (IBAction) btnInfoClick {
// kick off the about screen
// code follows
}
Как мне теперь подключить кнопку на панели навигации к моей функции btnInfoClick?
Или я с самого начала иду по этому пути неправильно?
Я должен отметить, что если я просто перетащу кнопку из Библиотеки прямо на панель навигации, я могу нажать на значок владельца файла, а затем перетащить btnInfoClick IBAction
на кнопку.В этом случае событие click срабатывает нормально.
Однако в сценарии, когда я сначала перетаскиваю кнопку в другое место, а затем на панель навигации, событие никогда не срабатывает.Не уверен, что я делаю не так.
Решение 2
Я думаю, это ошибка в IB.Но я нашел обходной путь здесь.Перепечатка для потомков:
- Создайте кнопку в представлении (не на панели навигации!)
- Установите для этой кнопки режим информационного освещения
- Установите действие для этой кнопки таким, чтобы оно было касанием изнутри вверх
- Переместите кнопку на панель навигации
Другие советы
Откройте IB, выберите UIBarButtonItem и в Инспекторе перейдите на вкладку Подключения.
Перетащите курсор из точки справа от селектор к вашему Разделение приложений/Владелец файла (тот, в котором было определено действие) и выберите действие.
Я полагаю, вы уже пробовали это, но на всякий случай.Когда действие не отображается, попробуйте изменить свое определение действия, чтобы оно было примерно таким:
- (IBAction)btnInfoClick:(id)sender;
и попробуйте повторить процесс еще раз.Я знаю, что на самом деле вам не обязательно указывать отправителя (по крайней мере, программно, как я всегда использую), но у меня была та же проблема, и после добавления параметра sender он работал корректно.
Удачи и дайте мне знать, работает ли это!