【问题标题】:@selector Pass with multiple arguments [duplicate]@selector 带有多个参数的传递[重复]
【发布时间】:2014-08-06 09:05:46
【问题描述】:

我是 iOS 星球的新手,下面是我的示例代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    UIButton  * _btnSample = [UIButton buttonWithType:UIButtonTypeCustom];

    [_btnSample setFrame: CGRectMake(100, 160, 200, 30)];

    [_btnSample setBackgroundColor:[UIColor redColor]];

    [_btnSample setTitle:@"Click Me" forState:UIControlStateNormal];

    [_btnSample addTarget:self action:@selector(btnClick::)withObjects   forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:_btnSample];

    //[self btnClick:@"12" :@"13"];

}


- (void)btnClick :(NSString *) stringValue1 : (NSString *) stringValue2
{
    NSLog(@"Click ME Button Clicked with a value::%@",stringValue1);
       NSLog(@"Click ME Button Clicked with a value::%@",stringValue2);
}

@selector我需要调用btnClickfn,它有两个参数,怎么做?

【问题讨论】:

  • @WojtekSurowka OP 想在函数调用中传递参数,而不是如何调用方法。
  • 不回答这个问题,但我建议您更新方法签名,不要将一个参数的名称用作下一个参数的一部分。我希望 Xcode 会给你一个警告。使用:- (void)btnClickWith:(NSString *)stringValue1 withString:(NSString *)stringValue2 或类似名称。这是 Objective-C 开发的更好实践。
  • 您可以使用此答案中提供的有关 UIButton 并将多个参数传递给其选择器的解决方案:stackoverflow.com/a/53779104/5324541

标签: ios objective-c selector


【解决方案1】:

简短的回答是你不能。控件调用的操作方法必须符合以下签名之一(请参阅Apple reference):

- (void)action
- (void)action:(id)sender
- (void)action:(id)sender forEvent:(UIEvent *)event

这是因为动作方法的参数是由控件提供的,并允许动作方法在必要时决定要做什么。

如果您能解释什么这些参数的含义,正如我从您的问题中没有看到的那样,那么我们几乎可以肯定地想出解决您问题的方法。

【讨论】:

  • 不,我只是想调用一个有多个参数的 fn...
  • @sankar2.0 由于该方法是一种操作方法,因此它必须符合我的答案中列出的签名之一。听起来您只需要创建一个 separate 操作方法,该方法本身将调用btnClick::
猜你喜欢
  • 2013-03-02
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
相关资源
最近更新 更多