Установите 2 действия для UIBarButtonItem

#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, она просто останавливает редактирование. Я не могу заменить кнопку «Отмена», потому что тогда я не знаю, как перейти из режима редактирования в обычный режим.