8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

使用 UITableViewDataSource 和自定义 UITableViewCell Delegate 的正确方法

Weird_dog 1月前

27 0

我正在努力将 UITableViewDataSource 移出 UITableViewController。但是我有一些自定义单元格有自己的委托,然后它们会调用 tableView 进行重新加载。我...

我正在努力移动 UITableViewDataSource 的外部 UITableViewController 。但是我有一些自定义单元格,它们有自己的委托,然后调用 来 tableView 重新加载。

我不确定正确的处理方法是什么。以下是我所拥有的:

final class MyTableViewController: UITableViewController {
    
    lazy var myTableViewDataSource: MyTableViewDataSource = { MyTableViewDataSource(myProperty: MyProperty) }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.dataSource = myTableViewDataSource
    }

}

细胞

 protocol MyTableViewCellDelegate: AnyObject {
    func doSomething(_ cell: MyTableViewCellDelegate, indexPath: IndexPath, text: String)
}


 final class MyTableViewCell: UITableViewCell, UITextFieldDelegate {
    
    @IBOutlet weak var packageSizeTextField: UITextField!
    
    weak var delegate: MyTableViewCellDelegate?
    
    var indexPath = IndexPath()
    
    override func awakeFromNib() {
        super.awakeFromNib()
    }
    
    func configureCell() {
        // configureCell...
    }
    
    func textFieldDidChangeSelection(_ textField: UITextField) {
        print(#function)
        delegate?.doSomething(self, indexPath: indexPath, text: textField.text ?? "")
    }
}

数据源

final class MyTableViewDataSource: NSObject, UITableViewDataSource {
    
    var myProperty: MyProperty!
    
    init(myProperty: MyProperty) {
        self.myProperty = myProperty
    }
    
    // ...
    
    func doSomething(_ cell: MyTableViewCell, indexPath: IndexPath, text: String) {
        // ...
        tableView.performBatchUpdates({
            tableView.reloadRows(at: [indexPath], with: .automatic)
        }) 
// ERROR - tableView doesn't exist
    }
    
}

我的问题是,我如何访问 tableView 此类提供源代码的?是否像添加对 tableView 的引用一样简单?

var tableView: UITableView
var myProperty: MyProperty!

init(myProperty: MyProperty, tableView: UITableView) {
            self.myProperty = myProperty
            self.tableView = tableView
        }
帖子版权声明 1、本帖标题:使用 UITableViewDataSource 和自定义 UITableViewCell Delegate 的正确方法
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Weird_dog在本站《uitableview》版块原创发布, 转载请注明出处!
最新回复 (0)
  • @StonedStudio - \“一种选择是让您的 MyTableViewController 符合您的 MyTableViewCellDelegate,然后将控制器设置为 dataSource 类中 cellForRowAt 中的委托。\”... 看看我的答案中的编辑 2,以及我在 GitHub 上发布的一个快速项目。

返回
作者最近主题: