Вопрос

Я уронил 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.Но я нашел обходной путь здесь.Перепечатка для потомков:

  1. Создайте кнопку в представлении (не на панели навигации!)
  2. Установите для этой кнопки режим информационного освещения
  3. Установите действие для этой кнопки таким, чтобы оно было касанием изнутри вверх
  4. Переместите кнопку на панель навигации

Другие советы

Откройте IB, выберите UIBarButtonItem и в Инспекторе перейдите на вкладку Подключения.

Перетащите курсор из точки справа от селектор к вашему Разделение приложений/Владелец файла (тот, в котором было определено действие) и выберите действие.

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

- (IBAction)btnInfoClick:(id)sender;

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

Удачи и дайте мне знать, работает ли это!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top