ios - 未调用 Swift 委托(delegate)

标签 ios swift uikit

我有一个委托(delegate) View ,我想在按下按钮时在 GameController 中调用 numpadView(numpadView:),但是我无法让它工作。 touchesBegan() 的重载工作正常,它实际上是 pressDelegate?.numpadView(self) 的行,它没有调用 GameController 类中的委托(delegate)函数。我很困惑缺少什么才能使其正常工作?

为了简单起见,我清理了代码,只留下与问题相关的基本部分。

NumpadView.swift

protocol NumpadPressDelegateProtocol {
  func numpadView(numpadView: NumpadView)
}

class NumpadView: UIButton{
  var pressDelegate: NumpadPressDelegateProtocol?

  init(char: Character) {
    let frame = CGRectMake(160, 100, 50, 50)
    super.init(frame:frame)

    self.setTitle("\(char)", forState: UIControlState.Normal)
    self.userInteractionEnabled = true
  }

  override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    pressDelegate?.numpadView(self)
  } 
}

GameController.swift

class GameController: NumpadPressDelegateProtocol {

  func numpadView(numpadView: NumpadView) {
    //do something
  }

}

最佳答案

GameController 声明为 NumpadPressDelegateProtocol 不足以让您获得回调。您还需要在 Gamecontroller 中设置 NumpadView 实例的 pressDelegate。假设 numpadView 是实例变量,无论是否为 IBOutlet,您都必须像这样设置委托(delegate)

内部 GameController 初始化

 numpadView.pressDelegate = self

关于ios - 未调用 Swift 委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27853482/

相关文章:

ios - 添加选项卡栏 Controller 后不会触发 Unwind segue 和 nav 按钮项目

arrays - 无法将值添加到字典

iphone - 沿着一系列 CGPoints 移动图像

ios - 如何在 UITableView 周围画线

uitableview - UITableViewDiffableDataSource:如何设置节标题?

ios - 如何在运行时在 iOS 上更改语言?

ios - 在我的 xcode 项目中包含库时出现问题

ios - 如何检查 UIView 是否仍然存在?

swift - tvOS:关注自定义 UITableViewCell 时 UILabel 不调整大小

android - Flutter Web 设备未在 Android Studio 和 VS Code 中显示