【问题标题】:iOS - Hard Code value in selector for UIButton action [duplicate]iOS - UIButton 操作的选择器中的硬代码值 [重复]
【发布时间】:2013-07-31 00:08:39
【问题描述】:

我想在UIButton 的操作的@selector 中硬编码一个值。

@selector 中添加值时,我收到一条错误消息:

这就是您通常将@selector 添加到UIButton 的方式:

[myButton addTarget:self action:@selector(myFunction::) forControlEvents:UIControlEventTouchDown];

这就是我想做的:

[myButton addTarget:self action:@selector(myFunction:1:) forControlEvents:UIControlEventTouchDown];

如何做到这一点?

编辑:rmaddy 在这里指出了一个不错的答案:perfomSelector on button and sending parameters

【问题讨论】:

  • 为什么不把 1 放在 myFunction 的实现中呢?如果您是硬编码,则无需传递它。
  • 感谢 rmaddy,这可能正是我想要的。
  • 与您的问题没有太大关系,但我强烈建议不要使用myFunction:: 形式的方法签名。 Objective-C 的一大优点是允许您的方法签名说明每个参数是什么。取 UIColor 方法+colorWithRed:green:blue:alpha:color:::: 读代码时哪个更有意义?

标签: ios objective-c selector hardcode


【解决方案1】:

你不能那样做。在抽象中,选择器只是一个字符串,表示您要调用的方法的名称。在这种情况下,框架决定将什么传递给它。

你想用这个来完成什么?根据答案,您可能可以在选择器方法中使用对象引用 (myButton) 本身进行比较,或者您可以在按钮的方法内设置标签值来代替硬连线数字。

【讨论】:

  • 答案是,你不能按照你所展示的方式做你所要求的。您唯一的其他选择是重构您的通用代码,以便您可以传递一个参数(例如一个标志)来指示您是作为按钮按下的结果还是从代码中的其他位置调用它。
【解决方案2】:

我要做的是给按钮 myButton 添加一个标签并将其设置为 1。然后在函数 myFunction id 中这样做:

-(void)myFunction:(UIButton *)button {
    NSLog(@"%i", button.tag);                // will output 1
}

所以选择器应该是这样的:@selector(myFunction:)

【讨论】:

  • 我的函数获取了按钮的标签,但是我从代码中的不同位置调用函数,这就是为什么我要硬编码 1、2 等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-26
  • 2013-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多