【问题标题】:Adding a target to a selector belonging to a different object将目标添加到属于不同对象的选择器
【发布时间】:2016-06-17 22:23:07
【问题描述】:

我有一个这样的 UIViewController:

import UIKit
import WebKit

class ViewController: UIViewController {

  var webView: WKWebView?
  var backButton: UIButton?

  override func loadView() {
    self.webView = WKWebView()

    self.backButton = UIButton(type: .system)
    self.backButton?.addTarget(self.webView, action: #selector(goBack), for: .touchUpInside)
  }
}

此代码尝试将点击返回按钮连接到WKWebViewgoBack() 实例方法。请注意,我已将 self.webView 传递给按钮的 addTarget() 调用。

这会导致编译错误:"Use of unresolved identifier 'goBack'"。我认为 Swift 编译器能够将 goBack() 解析为 WKWebKit 实例。

我可以编译它的唯一方法是传入self 并手动转发goBack() 调用:

override func loadView() {
    self.webView = WKWebView()

    self.backButton = UIButton(type: .system)
    self.backButton?.addTarget(self, action: #selector(goBack), for: .touchUpInside)
  }

func goBack() {
  self.webView?.goBack()
}

我在这里遗漏了什么明显的东西吗?

【问题讨论】:

    标签: ios swift2 selector addtarget


    【解决方案1】:

    你可以只限定你的选择器:

    #selector(self.webView.goBack)
    

    【讨论】:

    • 那么 addTarget() 的第一个参数应该还是self.webView,还是应该只是self
    • @arlomedia 应该是webView。在消息传递方面,self.webView 将是由选择器#selector(self.webView.goBack) 标识的消息的接收者。当该消息发送到self.webView 时,单击您的按钮将向它发送消息goBackself 不会响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多