【发布时间】:2013-10-19 04:19:50
【问题描述】:
我正在尝试将以下代码精简为一个方法。目前,八种相同的方法用于处理对八个UIButton 实例的点击。理想情况下,我只想将UIButton 作为参数传递给@selector,这样我就可以避免需要八个相同的方法。我正在努力将参数传递给选择器的语法。如果可能的话,我想要一个handleTap: onButton: 方法。目前,有 8 种方法(handleTap1 到 handleTap8)在按钮 1 到 8 上执行相同的操作。
UITapGestureRecognizer *tap1 = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap1:)];
UITapGestureRecognizer *tap2 = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap2:)];
UITapGestureRecognizer *tap3 = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap3:)];
UITapGestureRecognizer *tap4 = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap4:)];
UITapGestureRecognizer *tap5 = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap5:)];
UITapGestureRecognizer *tap6 = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap6:)];
UITapGestureRecognizer *tap7 = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap7:)];
UITapGestureRecognizer *tap8 = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap8:)];
[let1Button addGestureRecognizer: tap1];
[let2Button addGestureRecognizer: tap2];
[let3Button addGestureRecognizer: tap3];
[let4Button addGestureRecognizer: tap4];
[let5Button addGestureRecognizer: tap5];
[let6Button addGestureRecognizer: tap6];
[let7Button addGestureRecognizer: tap7];
[let8Button addGestureRecognizer: tap8];
这是其中一种方法的示例,显然我想用传入的参数替换 let1Button 来表示任何按钮。
- (void) handleTap1: (UITapGestureRecognizer *) recognizer
{
[_box setText: [_box.text stringByAppendingString: [let1Button titleForState: UIControlStateNormal]]];
[let1Button setUserInteractionEnabled:NO];
[let1Button setTitleColor: [UIColor blackColor] forState: UIControlStateNormal];
}
【问题讨论】:
-
为什么要手动向按钮添加手势识别器?他们已经拥有它们,并将相应地发送事件。
-
我正在使用既可以拖动又可以点击的按钮,如果没有点击手势,它对内部的触摸是否构成点击感到非常困惑。
-
有道理。感谢您的解释。
标签: objective-c syntax arguments selector