Swift 5,Xcode 10
我的应用使用了两个ViewControllers
:
UITableView
,单击一个单元格会调用UINavigationBarItem
“后退”按钮和底部的附加“保存”按钮,显示有关单元格的更多信息“保存”按钮保存所做的更改。要返回VC2,您可以单击“后退”按钮或保存更改,该更改还可以使用以下方法自动加载VC2:
@IBAction func onClickSave(_ sender: Any) {
//Save changes
delegate?.passRowSavedBack(true) //Tell VC1 that changes were saved
navigationController?.popViewController(animated: true)
}
如果我使用UINavigationBarItem
“后退”按钮返回,则该单元格还会保留选择颜色一秒钟,然后使用以下方法将其删除(例如在iOS“联系人”应用中):
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
myTableView.deselectRow(at: mylastRowPickedIndex!, animated: true)
}
示例gif。
问题是:如果我单击“保存”按钮,也会调用此代码,但是没有动画。
我的猜测是,popViewController
的返回时间比“返回”按钮调用所花费的时间更长,因此播放了动画,但是您没有及时“到达”该动画。
但是我该如何解决?有没有其他方法可以通过仍保存动画的“保存”按钮(不删除默认的“后退”按钮!)返回VC1?
编辑:我正在做什么:
protocol PassingProtocol {
func passRowSavedBack(_ valueSent: Bool)
}
popViewController
返回VC1(检查上面的第1个代码)deselectRow
中的viewWillAppear
(请检查上面的第二个代码)rowsSaved[lastRowPicked] = true
,因此可以在此处添加accessoryType
:public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! TableViewCell
cell.accessoryType = (rowsSaved[indexPath.row]==true) ? .checkmark : .none
return cell
}
myTableView.reloadData()
-以便显示新的选中标记答案 0 :(得分:1)
好的,最后我想我明白了问题所在。
您正在呼叫myTableView.reloadData()
,这是取消选择动画的问题。
您可以在viewDidAppear()中移动myTableView.reloadData()
,一切正常。