将void(^)(UIButton * _strong)发送到不兼容类型SEL

时间:2015-06-26 07:23:23

标签: ios objective-c

我正在尝试更换" @ selector"这里有一个功能块。但这样做会显示错误说:

错误:发送' void(^)(UIButton * __ strong)'参数不兼容 类型' SEL'

请指示如何直接放置功能块,而不是使用" @ selector"。

[_contactPhoneButton addTarget:self
                        action:^(UIButton *sender) {
  NSString *phoneNumber = [@"tel://" stringByAppendingString:sender.titleLabel.text];
  [[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]];
 }

4 个答案:

答案 0 :(得分:2)

阻止无法转换为SEL。他们的类型不同。

  • SEL是识别功能的名称,它发送给object。在运行时,对象使用SEL查找要执行的功能
  • Block是您可以执行的一些代码,它独立于Object。

如果您仍想使用阻止,请参阅此link

答案 1 :(得分:1)

您无法将 https://developers.google.com/youtube/v3/docs/errors 替换为Selector,因为它们是不同的类型。但是,您可以使用类似Block的内容来实现您想要的方法。

Reactive Cocoa

答案 2 :(得分:1)

您必须添加选择器,而不是阻止:

[_contactPhoneButton addTarget:self
                        action: @selector(buttonTapped:)];

然后

- (void) buttonTapped: (uibutton*) sender
{
 NSString *phoneNumber = [@"tel://" stringByAppendingString:sender.titleLabel.text];
  [[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]];
}

答案 3 :(得分:0)

试试这个:

 [_contactPhoneButton addTarget:[^{
        NSString *phoneNumber = [@"tel://" stringByAppendingString:sender.titleLabel.text];
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]];
    } copy] action:@selector(invoke) forControlEvents:UIControlEventTouchUpInside];