Objective-C iPhone - делегировать IBAction от одного класса к другому?Можно ли это сделать? - PullRequest
0 голосов
/ 16 февраля 2010

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

Это универсальный класс, называемый (AmountPicker), поэтому его можно использовать среди многих других классов. Я использую его, вызывая метод presentModalViewController , этот класс использует nib-файл. Внутри XIB есть скрытое текстовое поле и метка, а также кнопка «Готово» на панели навигации. Кнопка «Готово» - это IBAction, связанный с методом с именем doneButtonPressed.

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

Причина в том, что я использую класс amountPicker в двух местах, одном для ввода покупки, который берет текст метки и присваивает значение переменной внутри appDelegate, это было нормально, когда я просто использовал его в одном классе, но теперь есть элемент detailTableViewController для покупки, и это представление также должно предоставить способ изменить данные в случае, если они были введены неправильно.

Так что в подробном представлении я использую настраиваемый заголовок, настраиваемый заголовок имеет textField для названия покупки, кнопку для активации AmountPicker и метку для суммы, когда кнопка суммы нажимается, затем Появляется класс AmountPicker, и пользователь вводит сумму и нажимает кнопку «Готово», СЕЙЧАС, здесь я должен изменить логику для doneButton вместо использования переменной в appDelegate.

Я думал, что DetailTableViewController может выступать в качестве делегата для класса amountPicker и переопределять метод doneButtonPressed, так что amountLabel может быть обновлен с новым количеством.

Возможно ли это, если нет, каков правильный путь?

1 Ответ

2 голосов
/ 16 февраля 2010

Ваше мышление верно наряду с тем, как обычно используется делегирование. Я хотел бы создать протокол Objective-C, может быть, AmountPickerDelegate. Тогда в вашем интерфейсе для AmountPicker вы получите следующее:

@interface AmountPicker : NSObject {
    NSString *someValue;
    ...
    id <AmountPickerDelegate> delegate;
}

@property (assign) id <AmountPickerDelegate> delegate;

@end

Затем в классе вашего делегата вы сделаете это:

@interface DetailTableViewController : UITableViewController <AmountPickerDelegate>

Наконец, в исходном классе AmountPicker вы можете вызвать что-то вроде этого:

[delegate amountPickerDidPressDoneButton];

, который будет выполняться в делегате.

...