我有一个半复杂的设置:
我有一个UITableViewController,它实现了一个名为CustomCellProtocol的协议,它使用自定义单元格,并将自身设置为自定义单元格的委托。自定义单元格中包含UIButtons。
我想要发生的是用户点击自定义单元格中的按钮,然后执行某些操作,然后重新加载表格。为此,我需要创建此协议委托设置。以下是相关代码:
protocol CustomCellProtocol {
func didTapStar(cell: UITableViewCell, tag: Int)
func didTapShortList(cell: UITableViewCell, tag: Int)
}
在TableViewController中:
func didTapStar(cell: UITableViewCell, tag: Int) {
// This is called by a function within the custom cell
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.tableView.reloadData()
})
}
在自定义单元格类中:
@IBAction func toggleReadStatus(sender: UIButton) {
bookage.toggleReadStatus(sender.tag, state: "yes")
delegate.didTapStar(self, tag: sender.tag)
}
令人高兴的是,整个设置工作正常,模型按预期更新,直到我需要调用tableView.reloadData()。由于某种原因,要么没有被调用,要么在执行其余代码之前被调用。我怀疑我需要找到一些方法来强制reloadData()在其他一切之后执行,但我不完全确定这里发生了什么。
有什么建议吗?
答案 0 :(得分:1)
我转载了你的情况。有用。
import UIKit
class ViewController: UITableViewController {
weak var delegate: CustomCellProtocol?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
extension ViewController: CustomCellProtocol {
func didTapStar(cell: UITableViewCell, tag: Int) {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.tableView.reloadData()
})
}
func didTapShortList(cell: UITableViewCell, tag: Int) {
}
}
import UIKit
protocol CustomCellProtocol: NSObjectProtocol {
func didTapStar(cell: UITableViewCell, tag: Int)
func didTapShortList(cell: UITableViewCell, tag: Int)
}
class CustomCell: UITableViewCell {
var delegate: CustomCellProtocol?
@IBAction func toggleReadStatus(sender: UIButton) {
delegate?.didTapStar(self, tag: sender.tag)
}
}