我有以下内容:
UITapGestureRecognizer *tapGesture;
SEL sel = @selector(profilePop:withUser:) withObject:tapGesture withObject:message.creator;
tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:sel];
我想让它能够打电话:
- (void)profilePop:(UITapGestureRecognizer *)recognizer withUser:(Login *)user
{
//some code here
}
但为什么不这样做?
答案 0 :(得分:3)
选择器只知道它的名称和任何参数名称,而不知道它的参数。
UIGestureRecognizer
只接受采用其类型为零或一个参数的操作。
为了做你想做的事,你需要编写一个包装器方法来将Login
实例传递给profilePop:withUser:
。
所以,你会写这样的东西:
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(profilePopWrapper:)];
[[self view] addGestureRecognizer:tapGesture];
[tapGesture release];
//....
- (void) profilePopWrapper:(UIGestureRecognizer *) gr {
Login *someUser = ...;
[self profilePop:gr withUser:someUser];
}
答案 1 :(得分:1)
正如the documentation中所述,行动讯息必须采取特定形式
- (void)handleGesture
- (void)handleGesture:(UIGestureRecognizer *)sender
你不能只使用任意选择器作为动作;它必须是符合上述模式之一的选择器。
答案 2 :(得分:1)
以这种方式在@selector函数中使用单个参数。
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(profilePop:)];
因为UITapGestureRecognizer只能识别点击识别。