如何解决iOS视图中的MVC设计与模型对话-Swift-以编程方式
我对iOS应用程序中的MVC设计有疑问。
假设我使用此手势识别器设置了UIView
类:
class CardView: UIView {
init(frame: CGRect) {
let panGesture = UIPanGestureRecognizer(target: self,action: #selector(handlePan(gesture:)))
self.addGestureRecognizer(panGesture!)
}
@objc func handlePan(gesture : UIPanGestureRecognizer) {
switch gesture.state {
case .began:
handleBegan(gesture)
case .changed:
handleChanged(gesture)
case .ended:
handleEnded(gesture)
sendDataToDatabase()
case .cancelled:
turnCardBackToOrigin()
default:
break
}
}
}
您可以看到视图手势的目标是视图本身。
现在假设在交换机case .ended
中,我想将数据发送到数据库。
由于我正在使View(CardView)与模型(Data)对话,这是否会打破MVC设计规则?根据MVC,此代码设计实现是否错误?
解决方法
是的,它破坏了MVC模式。只有管制员才能与模型对话。
您的控制器可以充当delegate
的{{1}}。
这是解决问题的方法。
CardView
然后,您只需要使Controller符合protocol CardViewDelegate: class {
func cardViewShouldSendDataToDatabase(_ cardView: CardView)
}
class CardView: UIView{
weak var delegate: CardViewDelegate?
// ...
func sendDataToDatabase() {
delegate?.cardViewShouldSendDataToDatabase(self)
}
}
协议并实现与模型进行通信的CardViewDelegate
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。