gpt4 book ai didi

ios - 使用委托(delegate)从 UIView 子类向 UIViewController 发送数据

转载 作者:搜寻专家 更新时间:2023-11-01 07:17:51 24 4
gpt4 key购买 nike

我有一个 IBOutlet 连接的 UIView 对象 (innerView) 位于 View Controller (UIViewController) 的 View 之上。我想让用户用手指旋转 innerView。所以我将 UIView 的子类 (TouchView) 设置为 innerView 的类。当用户旋转 View 对象时,我希望 View Controller 从 TouchView 接收一个值。我所拥有的是以下内容。

// UIView
protocol TouchDelegate: class {
func degreeChanged(degree: Double)
}

class TouchView: UIView {
weak var delegate: TouchDelegate? = nil
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
let aTouch: AnyObject = touches.first! as UITouch
let newLoc = aTouch.location(in: self.superview)

...
...

let degree = { (radians: Double) -> Double in
return radians * 180 / M_PI
}
self.delegate?.degreeChanged(degree: degree)
}
}

// UIViewController
class ViewController: UIViewController, TouchDelegate {
@IBOutlet weak var innerView: UIView!

// MARK: - View
override func viewDidLoad() {
super.viewDidLoad()
let touchView = TouchView()
touchView.delegate = self
}

// MARK: - From TouchView
func degreeChanged(degree: Double) {
print(degree) // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< no call
}
}

好吧, View Controller 永远不会收到来自 TouchView 的委托(delegate)调用。我究竟做错了什么?感谢您的帮助。

最佳答案

我看到两个问题

  1. 您创建了一个新的 touchView 实例,但没有将它添加到您的 View Controller 的 View 中
  2. 您的 innerView 不是 touchView 的实例并且未设置其委托(delegate)

我对你的情况的处理方法是这样的:

// UIViewController
class ViewController: UIViewController, TouchDelegate {
@IBOutlet weak var innerView: TouchView!

// MARK: - View
override func viewDidLoad() {
super.viewDidLoad()
innerView.delegate = self
}

// MARK: - From TouchView
func degreeChanged(degree: Double) {
print(degree) // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< no call
}
}

关于ios - 使用委托(delegate)从 UIView 子类向 UIViewController 发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41007529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com