我在快速编码方面还很陌生,在过去的几天里我一直在努力寻找解决问题的方法,但现在还没有。
我有一个名为userData
的类,它具有各种属性:
class UserData {
var name: String
var age: Int
var credits: Int = 1
...
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
在 viewController.swift 中,我声明了此类的对象:
...
var user = UserData(name: "testing", age: 5)
...
在同一个viewController
中,我有一个UITableView
和几个UITableViewCells
。在每个单元格中都有一个UIStepper
使用来自单元格的UIStepper
,我想增加或减少位于 viewController.swift 内的对象credits
的属性user
,并从 tableViewCell.swift 文件
据我所知,我认为我应该使用一个委托,但我可以弄清楚如何实现它。
更多信息: 请原谅艺术品,我不是艺术家...
用户有一定数量的可用于工作的蚂蚁(此数字是我的对象用户的属性)。还有一个关于当前正在工作的蚂蚁数量的属性(在我的屏幕截图中为“使用的蚂蚁”)。
首先,顶部的白色标签显示为“ 0/5”(表示用户有5个可用的蚂蚁在工作,但目前没有一个在工作)。
当用户增加“清除剂蚂蚁”的步进器时,顶部的白色标签应显示为“ 1/5”(表示当前有5种可用的蚂蚁在工作)。
我想做的是,当用户单击步进器时,“当前正在工作的蚂蚁”的用户属性会相应地递增或递减。
谢谢
答案 0 :(得分:2)
在视图控制器的cellForRowAt
中设置该逻辑。
设置单元格时,每次UIStepper值更改时,您都可以在视图控制器内部添加一个函数作为目标:
// inside cellForRowAtIndexPath:
cell.addTarget(self, action: #selector(doSomething(sender:), for: .valueChanged)
在doSomething
内部,您设置了用于更新模型的逻辑。
func doSomething(sender: UIStepper) {
// do stuff here
}
使用委托模式的示例进行编辑,对于将来的读者而言,这将是更好的解决方案。
首先创建一个协议:
protocol StepperCellDelegate {
func didChangeValueForStepper(inCell: Cell, whateverInfoYouWantHere:...)
func otherUsefulFunctions(...)
}
在您的单元格类中,设置更改值的目标/操作:
// inside the cell's initialization (`init(style:reuseIdentifier:)`
self.addTarget(self, action: #selector(valueChanged(sender:), for: .valueChanged)
您的单元格还需要一个委托属性:
weak var stepperCellDelegate: StepperCellDelegate?
doSomething
看起来像这样:
func valueChanged(sender: UIStepper) {
stepperCellDelegate?.didChangeValueForStepper(inCell: self, ...)
}
您的ViewController将实现协议
extension MyViewController: StepperCellDelegate {
func didChangeValueForStepper(inCell: Cell, whateverInfoYouWantHere:...) {
// implementation here
}
func otherUsefulFunctions(...){
// implementation here
}
}
在cellForRowAtIndexPath
内部将自己设置为委托:
// inside cellForRowAtIndexPath:
cell.stepperCellDelegate = self
答案 1 :(得分:1)
委派是处理此问题的正确方法。
该UItableviewCell —两者看起来很相似– 应该使用一组方法公开协议 UIViewController可以实现的功能。方法是 当您点击UIStepper小部件时触发。
最好坚持这种方法,并在所有地方重复使用。使 容易处理的事物。