#iphone #objective-c #uibarbuttonitem #abaddressbook
#iPhone #objective-c #uibarbuttonitem #электронная адресная книга
Вопрос:
Возможно ли зарегистрировать 2 действия для UIBarButtonItem?
В частности, я имею в виду «Отменить» UIBarButtonItem, присутствующий в ABPersonViewController. За этой кнопкой стоит действие по умолчанию, которое я не хочу менять, но я хотел бы добавить новое действие при нажатии этой кнопки.
Есть идеи о том, как это можно было бы сделать?
Спасибо!
Ответ №1:
Я удалил свой предыдущий ответ, поскольку неправильно понял вопрос. Не уверен, что это приложение должно быть одобрено Apple b / c не уверен, что вы можете получить указатель на кнопку отмены «законным» способом, но я предполагаю, что вы можете получить доступ к кнопке.
При первом представлении контроллера просмотра пользователя вы можете получить его цель и действие по умолчанию из target
и action
свойств и сохранить их. Затем установите для них пользовательские target
и action
. При вызове вашего пользовательского действия отправьте действие по умолчанию целевому объекту по умолчанию, а затем выполните любое свое пользовательское поведение.
Это лучшая идея, которая у меня есть, надеюсь, она сработает!
Комментарии:
1. Черт возьми, не совсем. Я создал свой собственный класс CustomABPersonViewController, который я открываю. Вы, вероятно, имеете в виду ABNewPersonViewController, который только добавляет нового пользователя. Для ABPersonViewController кнопка отмены только возвращает представление к его обычной / исходной форме. Я действительно не вижу никакого другого решения, кроме добавления 2 действий для кнопки. Я попытался прикрепить к кнопке только одно действие, но это проигнорирует действие по умолчанию.
2. Извините, я неправильно понял. Я пересмотрел свой ответ, надеюсь, это поможет.
Ответ №2:
Предполагая, что вы можете получить ссылку на кнопку, вы должны быть в состоянии вызвать addTarget:action:forControlEvents:
, чтобы добавить другое действие.
Я случайно обнаружил, что это можно сделать с UIButton
, когда я (я думал) заменял действия на кнопке в зависимости от состояния пользовательского интерфейса, но на самом деле я добавлял действия к кнопкам. Именно тогда я узнал о removeTarget:action:forControlEvents:
. 🙂
Как уже говорилось, если у вас есть кнопка с надписью «Отмена», и вы перегружаете ее чем-то дополнительным, видимым пользователю, это может сбить пользователя с толку. Если вы просто хотите, чтобы что-то происходило в фоновом режиме, когда пользователь нажимает «Отмена», то это интересный способ добиться этого! Мне это нравится.
Комментарии:
1. Спасибо за отметку об ответе. Однако, нет addTarget:action:forControlEvents: для UIBarButtonItem.
2. Действительно. Но есть отдельные
setTarget:
иsetAction:
методы. Это заставляет меня задуматься,UIBarButtonItems
поддерживают ли они несколько подобныхUIButton
действий или нет… Попробуйте и дайте нам знать.3. Уже пробовал, отметьте. UIBarButtonItems поддерживают только 1 цель и действие. Если вы «установите» действие, оно перезапишет все, что было там раньше (например, действие по умолчанию из ABPersonViewController). Я думал, что может быть способ обойти это с помощью observer, но пока мне с этим не везет.
4. Хм .. Ну, если при нажатии «Отмена» также появится представление, возможно, вы могли бы сделать все, что вам нужно в
viewWillDisappear:
. В качестве альтернативы, возможно, вы могли бы просто заменить предоставленную кнопку отмены новой кнопкой, которую вы создаете сами и которой полностью управляете.5. Отмена не вызывает viewWillDissappear, она просто останавливает редактирование. Я не могу заменить кнопку «Отмена», потому что тогда я не знаю, как перейти из режима редактирования в обычный режим.