【问题标题】:Issue with implementation of Extension of UIButtonUIButton 扩展的实现问题
【发布时间】:2017-02-07 15:41:51
【问题描述】:

我在多个 VC 中有一个呼叫按钮,它执行呼叫同一号码的操作。我决定创建 UIButton 的扩展,而不是在每个 VC 中定义相同的函数。

需要帮助,不知道为什么我遇到问题,但在 target:selfExpected parameter type following ':' 时出现错误

以下是代码:-

extension UIButton {
    func callBtn(target:self)
    {
        let url = NSURL(string: "tel://1234567890")!
        UIApplication.sharedApplication().openURL(url)
    }
}

编辑: 更新到提到的解决方案:-

extension UIButton {
    func callBtn(target:UIButton)
    {
        let url = NSURL(string: "tel://1234567890)")!
        UIApplication.sharedApplication().openURL(url)
    }
}

Inside Required VCs :- (调用如下)

callBtn.addTarget(self, action: #selector(callBtn.callBtn(_:)), forControlEvents: .TouchUpInside)

出现以下错误:-

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '- unrecognized selector sent to instance 0x15e8b330 '

【问题讨论】:

  • 你是如何调用这个方法的!
  • 实际上我添加了 3 个参数目标、动作和控制。打算打电话给btn.addTarget(btn.callBtn)
  • @Vishnuvardhan :- 以下是我调用该方法的方式:- callBtn.addTarget(self, action: #selector(callBtn.callBtn(_:)), forControlEvents: .TouchUpInside) 在所需的 VC 中
  • @EricAya 那是我的真实密码,只是手机号码变了。

标签: ios uibutton swift2


【解决方案1】:

你的代码应该是这样的,

extension UIButton {
func callBtn(target:UIButton)
{
    let url = NSURL(string: "tel://1234567890")!
    UIApplication.sharedApplication().openURL(url)
}
}

【讨论】:

  • 你能告诉我为什么self 不起作用吗?在这种情况下,self 和 UIButton 与在 UIButton 的扩展中使用的相同。
  • 现在,如何使用那个扩展?
【解决方案2】:

如果您查看该错误,它表示已将无法识别的选择器发送到实例。这是因为您在按钮的addTarget: 方法中添加的“动作”应该在target 上调用。在这里,您给出了self,它是UIViewController 类型的对象,它没有称为callBtn: 的方法。所以它不会识别callBtn: 方法调用。而是将扩展名从 UIButton 更改为 UIViewController 以便它实现该方法。因此,无论何时点击按钮,它都会在您的目标 self 上调用您的操作方法 (callBtn:),即 UIViewController

extension UIViewController {
    func callBtn(sender: UIButton) {
        let url = NSURL(string: "tell://1234567890")!
    }
}

【讨论】:

    【解决方案3】:

    尝试使用..

      extension UIButton {
            func callBtn(target:UIButton)
            {
                let url = NSURL(string: "tel://1234567890")!
                UIApplication.sharedApplication().openURL(url)
            }
        }
    

    如果您需要任何帮助,请随时问我。

    【讨论】:

    • 现在,如何使用那个扩展?
    猜你喜欢
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多