У меня есть следующий код:
[replyAllBtn addTarget:self.target action:@selector(ReplyAll:) forControlEvents:UIControlEventTouchUpInside];
- (void)replyAll:(NSInteger)tid {
// some code
}
Как я могу отправить параметр функции ReplyAll
?
У меня есть следующий код:
[replyAllBtn addTarget:self.target action:@selector(ReplyAll:) forControlEvents:UIControlEventTouchUpInside];
- (void)replyAll:(NSInteger)tid {
// some code
}
Как я могу отправить параметр функции ReplyAll
?
Метод replyAll должен принимать (id) отправителя. Если UIButton запустил событие, то тот же UIButton будет передан в качестве отправителя. У UIButton есть свойство "tag", к которому вы можете присоединить свои собственные данные (например, winforms.net).
Итак, вы подключили свое событие с помощью:
[replyAllBtn addTarget:self.target action:@selector(ReplyAll:) forControlEvents:UIControlEventTouchUpInside];
replyAllBtn.tag=15;
тогда обработайте его с помощью:
(void) ReplyAll:(id)sender{
NSInteger *tid = ((UIControl*)sender).tag;
//...
Функция селектора обычно определяется как таковая:
- (void) ReplyAll:(id)sender;
Таким образом, единственный параметр, который когда-либо будет принимать действие, - это фактический элемент управления, который его вызвал. Вы можете просто добавить свойство к своему элементу управления, которое можно прочитать в replyAll
Если вы хотите отправить значение int, установите тег кнопки = значение int, которое вы хотите передать. Затем вы можете получить доступ к значению тега кнопки, чтобы получить нужную вам сумму.
NSInteger не является указателем. Попробуйте это
NSInteger tid = sender.tag;
Теперь он работает: D.
{
NSInteger tid = [sender tag];
}
Модель MVC, используемая в Cocoa, работает по-разному. В принципе, идея состоит в том, что элемент управления (= вид), такой как кнопка, позволяет только функции знать, что он был нажат, не зная, что это значит. Затем функция должна знать всю динамику и зависимости. В вашем случае это функция, которая должна найти параметр. Для этого вы будете "связывать" другие объекты с функцией (= контроллер).
Я предлагаю вам сначала прочитать несколько учебных пособий Cocoa, если вы хотите продолжить программирование iPhone.
Есть несколько хороших способов сделать это. Двумя наиболее часто выполняемыми должно быть то, что контроллер (кто получает действие) знает о возможных отправителях или сам отправитель имеет метод, который вы используете для определения правильного поведения.
Первый (мой предпочтительный способ, но легко спорить об обратном) будет реализован следующим образом:
@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