Как я могу передать параметр этой функции? - PullRequest
10 голосов
/ 16 января 2009

У меня есть следующий код:

[replyAllBtn addTarget:self.target action:@selector(ReplyAll:) forControlEvents:UIControlEventTouchUpInside];

- (void)replyAll:(NSInteger)tid {
// some code
}

Как отправить параметр в функцию ReplyAll?

Ответы [ 6 ]

21 голосов
/ 19 января 2009

Метод replyAll должен принимать (id) отправителя. Если UIButton вызвал событие, то тот же UIButton будет передан как отправитель. UIButton имеет свойство «tag», к которому вы можете прикрепить свои собственные пользовательские данные (очень похоже на .net winforms).

Таким образом, вы бы подключили свое мероприятие с:

[replyAllBtn addTarget:self.target action:@selector(ReplyAll:) forControlEvents:UIControlEventTouchUpInside];
replyAllBtn.tag=15;

затем обработайте его:

(void) ReplyAll:(id)sender{
    NSInteger *tid = ((UIControl*)sender).tag;
    //...
2 голосов
/ 19 января 2009

Сейчас работает: D.

{
NSInteger tid = [sender tag];
}
2 голосов
/ 19 января 2009

Если вы хотите отправить значение типа int, установите тег кнопки = значение типа int, которое вы хотите передать. Затем вы можете получить доступ к значению тега кнопки, чтобы получить нужный вам int.

NSInteger не является указателем. Попробуйте это

NSInteger tid = sender.tag;
2 голосов
/ 16 января 2009

Функция выбора обычно определяется следующим образом:

- (void) ReplyAll:(id)sender;

Таким образом, единственный параметр, который когда-либо получит действие, - это фактический элемент управления, который его вызвал. Вы можете просто добавить свойство в свой элемент управления, которое можно прочитать в replyAll

1 голос
/ 16 января 2009

Модель MVC, используемая в Какао, работает по-другому. По сути, идея заключается в том, что элемент управления (= представление), такой как кнопка, только позволяет функции знать, что она нажата, не зная, что это значит. Функция должна знать всю динамику и зависимости. В вашем случае это функция, которая должна найти параметр. Для этого вы будете «привязывать» другие объекты к функции (= controller).

Я предлагаю вам сначала прочитать несколько руководств по какао, если вы хотите продвинуться вперед в программировании на iPhone.

0 голосов
/ 17 января 2009

Есть несколько хороших способов сделать это. Двумя наиболее часто используемыми способами было бы информирование контроллера (который получает действие) о возможных отправителях или наличие у самого отправителя метода, который вы в конечном итоге используете для определения правильного поведения.

Первый (мой предпочтительный способ, но легко утверждать обратное) будет реализован так:

@interface Controller : NSObject {
    UIButton *_replyToSender;
    UIButton *_replyToAll;
}
- (void)buttonClicked:(id)sender;
@end

@implementation Controller
- (void)buttonClicked:(id)sender {
    if (sender == _replyToSender) {
         // reply to sender...
    } else if (sender == _replyToAll) {
         // reply to all...
    }
}
@end

Второй способ будет реализован таким образом:

typedef enum {
    ReplyButtonTypeSender = 1,
    ReplyButtonTypeAll,
} ReplyButtonType;

@interface Controller : NSObject {
}
- (void)buttonClicked:(id)sender;
@end

@interface MyButton : UIButton {
}
- (ReplyButtonType)typeOfReply;
@end

@implementation Controller
- (void)buttonClicked:(id)sender {
    // You aren't actually assured that sender is a MyButton, so the safest thing
    // to do here is to check that it is one.
    if ([sender isKindOfClass:[MyButton class]]) {
        switch ([sender typeOfReply]) {
            case ReplyButtonTypeSender:
                // reply to sender...
                break;
            case ReplyButtonTypeAll:
                // reply to all...
                break;
        }
    }
}
@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...