iOS视图中的MVC设计以编程方式与Model-Swift对话
我有一个关于iOS应用程序中MVC设计的问题 假设我使用此手势识别器设置了一个iOS视图中的MVC设计以编程方式与Model-Swift对话,swift,model-view-controller,uiview,uipangesturerecognizer,programmatically,Swift,Model View Controller,Uiview,Uipangesturerecognizer,Programmatically,我有一个关于iOS应用程序中MVC设计的问题 假设我使用此手势识别器设置了一个UIView类: class CardView:UIView{ init(帧:CGRect){ 让panGesture=UIPangESTURE识别器(目标:自我,动作:#选择器(手势:)) self.addgesture识别器(panGesture!) } @objc func handlePan(手势:UIPangestureRecognitor){ 开关状态{ 案例.开始: 把手(手势) 案例。更改: 手变了(手
UIView
类:
class CardView:UIView{
init(帧:CGRect){
让panGesture=UIPangESTURE识别器(目标:自我,动作:#选择器(手势:))
self.addgesture识别器(panGesture!)
}
@objc func handlePan(手势:UIPangestureRecognitor){
开关状态{
案例.开始:
把手(手势)
案例。更改:
手变了(手势)
案件结束:
手舞足蹈(手势)
sendDataToDatabase()
案件.已取消:
turnCardBackToOrigin()
违约:
打破
}
}
}
正如您所看到的,视图手势的目标是视图本身。
现在假设在switchcase.end中,我想向数据库发送数据
既然我让视图(CardView)与模型(数据)对话,这会打破MVC设计规则吗?根据MVC,这种代码设计实现是错误的吗?是的,它打破了MVC模式。只有控制器才能与模型对话。
您的控制器可以充当卡视图的代表
这就是你可以修复它的方法
protocol CardViewDelegate: class {
func cardViewShouldSendDataToDatabase(_ cardView: CardView)
}
class CardView: UIView{
weak var delegate: CardViewDelegate?
// ...
func sendDataToDatabase() {
delegate?.cardViewShouldSendDataToDatabase(self)
}
}
然后,您只需使控制器符合CardViewDelegate
协议,并实现cardViewShouldSendDataToDatabase
,在其中您将与模型对话。此外,我认为该过程中缺少的一个步骤是在controllerI中创建视图时,将视图委派设置为控制器我也不同意这一点cardViewShouldSendDataToDatabase
?卡片视图甚至不应该知道有一个数据库。可以说,视图控制器甚至不应该知道。你会怎么做@matt?你可以根据自己的意愿命名你的委托方法;)我同意matt的观点,你应该根据方法的功能来命名方法。例如,如果要在平移手势结束时关闭视图,则应将其命名为cardwiewwilldisease