Objective c 在initWithTarget调用中使用选择器发送参数

Objective c 在initWithTarget调用中使用选择器发送参数,objective-c,syntax,arguments,selector,Objective C,Syntax,Arguments,Selector,我试图将下面的代码精简为一个方法。目前,在八个UIButton实例上使用八种相同的方法来处理点击。理想情况下,我只想将ui按钮作为参数传递到@selector中,这样就可以避免需要八个相同的方法。我正在努力学习将参数传递给选择器的语法。如果可能的话,我想要一个handleTap:onButton:方法。目前,有八种方法(handleTap1到handleTap8)在按钮1到8上执行相同的操作 UITapGestureRecognizer *tap1 = [[UITapGestureRecogni

我试图将下面的代码精简为一个方法。目前,在八个
UIButton
实例上使用八种相同的方法来处理点击。理想情况下,我只想将
ui按钮
作为参数传递到
@selector
中,这样就可以避免需要八个相同的方法。我正在努力学习将参数传递给选择器的语法。如果可能的话,我想要一个
handleTap:onButton:
方法。目前,有八种方法(
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];

}

手势识别器具有属性视图。您可以检查该按钮以确定在哪个按钮上执行了手势。

手势识别器具有属性视图。您可以检查以确定在哪个按钮上执行了手势。

UIButton
UIView
的子类)具有属性
view
。它是手势识别器附加到的视图

UITapGestureRecognizer *tap1 = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap:)];
[let1Button addGestureRecognizer: tap1];

- (void) handleTap: (UITapGestureRecognizer *) recognizer
{
    UIButton *button = (UIButton *)recognizer.view;
    [_box setText: [_box.text stringByAppendingString: [UIButton titleForState: UIControlStateNormal]]];
    [UIButton  setUserInteractionEnabled:NO];
    [UIButton setTitleColor: [UIColor blackColor] forState: UIControlStateNormal];

}
UIButton
UIView
的子类)具有属性
view
。它是手势识别器附加到的视图

UITapGestureRecognizer *tap1 = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap:)];
[let1Button addGestureRecognizer: tap1];

- (void) handleTap: (UITapGestureRecognizer *) recognizer
{
    UIButton *button = (UIButton *)recognizer.view;
    [_box setText: [_box.text stringByAppendingString: [UIButton titleForState: UIControlStateNormal]]];
    [UIButton  setUserInteractionEnabled:NO];
    [UIButton setTitleColor: [UIColor blackColor] forState: UIControlStateNormal];

}

手势识别器将其作为参数移交给动作。 在action方法中,您可以访问视图

UIView myView = recognizer.view
if (myView isKindOfClass:[UIButton class])
{
   ...
}

手势识别器将其作为参数移交给动作。 在action方法中,您可以访问视图

UIView myView = recognizer.view
if (myView isKindOfClass:[UIButton class])
{
   ...
}

我可以使用哪种财产<代码>识别器似乎有自己的属性,我无法通过UIButton设置这些属性。我遗漏了什么吗?它有一个属性“视图”。UIButton是UIView的一个子类。因此,在您的案例中,“视图”属性应该包含您已添加识别器的UIButton。我可以使用哪个属性<代码>识别器似乎有自己的属性,我无法通过UIButton设置这些属性。我遗漏了什么吗?它有一个属性“视图”。UIButton是UIView的一个子类。因此,在您的情况下,“视图”属性应该包含已添加识别器的UIButton。为什么要手动将手势识别器添加到按钮?他们已经有了这些按钮,并将相应地发送事件。我使用的按钮既可以拖动也可以点击,如果没有点击手势,它会非常困惑于内部的润色是否构成点击。这是有意义的。感谢您的解释。为什么您要手动将手势识别器添加到按钮?他们已经有了这些按钮,并将相应地发送事件。我使用的按钮既可以拖动也可以点击,如果没有点击手势,它会非常困惑于内部的润色是否构成点击。这是有意义的。谢谢你的解释。后续:如果我在多个按钮上添加相同的识别器,它只会附加到我上次添加的按钮上。不能将单个手势识别器连接到多个按钮吗?手势识别器只能属于一个视图。一个手势识别器只能连接到一个视图。检查我的答案:关于如何检查哪个视图被点击。后续:如果我在多个按钮上添加相同的识别器,它只会附加到我最后一个按钮上。不能将单个手势识别器连接到多个按钮吗?手势识别器只能属于一个视图。一个手势识别器只能连接到一个视图。检查我的答案:关于如何检查哪个视图被点击。