Когда пользователь нажимает на UISegmentedControl
и меняет, какой сегмент выбран, я хочу выполнить некоторую проверку. Если проверка не удалась, я хочу «отменить» их выбор и повторно выбрать элемент, который они ранее выбрали.Отменить выбор с UISegmentedControl
Что это самый простой способ сделать это? Я думаю, что нужно что-то вроде
- (BOOL) segment:(UISegmentedControl *)seg shouldSelectSegmentAtIndex:(NSInteger)newIndex`
, но я смотрел на Apple Docs, но я не видел ничего подобного, - на самом деле я ничего не видел с will
в нем вообще. Должен ли я создать категорию или подкласс для этого, или я просто пропущу его?
Предположим, я мог бы добавить ivar, который удерживает выбранный индекс сегмента после его проверки, а затем вызывает [mySegmentedControl setSelectedSegmentIndex:myIvar];
, если проверка не удалась, или myIvar = [mySegmentedControl selectedSegmentIndex];
, когда она проходит, но это немного портит. Это также немного больно, если у меня много сегментированных элементов управления на одном экране. Я полагаю, что если я создам свой собственный подкласс, мне придется сделать что-то подобное.
EDIT: Другие языки программирования, которые я использовал, изначально поддерживают функцию отмены, не требуя от программиста выполнить отмену самостоятельно. Я ищу, чтобы узнать, знает ли кто-нибудь об этом для Objective-C. Если он не существует, знает ли кто-нибудь лучший способ реализовать его иначе, чем метод ivar, описанный выше?
Да, это довольно близко к тому, что я ищу, я просто ищу способ сделать это, возможно, немного более изящным. Я отредактировал свой OP, чтобы сделать его более ясным, что я ищу. – GeneralMike
Вы заглянули в NSUndoManager? –
У меня нет, я прочитаю на нем несколько [здесь] (https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/Classes/NSUndoManager_Class/Reference/Reference.html). С первого взгляда это может быть то, что я ищу. – GeneralMike