IOS table selectRow 方法选中cell 不触发 didSelectRowAt方法

发布于 2022-09-11 15:17:51 字数 2933 浏览 14 评论 0

class MainViewController: UIViewController {
    public var seletedIndex: Int = 0
    lazy var tableView: UITableView = {
        let table = UITableView()
        table.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
        return table
    }()
    private var btn: UIButton = {
        let btn = UIButton()
        btn.setTitle("支付", for: .normal)
        btn.setTitleColor(UIColor.black, for: .normal)
        return btn
    }()
    public var items = [PayMenmet(name: "支付宝", icon: "alipay"),PayMenmet(name: "微信", icon: "wechatpay")]
    lazy var mainView: MainView = MainView()
    private let disposeBag = DisposeBag()
    lazy var service: MainService = MainService.instance
    override func viewDidLoad() {
        super.viewDidLoad()
        initView()
        initBindData()
    }
    func initView() {
        self.view.addSubview(tableView)
        self.view.addSubview(btn)
        tableView.snp.makeConstraints { make in
            make.center.equalToSuperview()
            make.left.right.equalToSuperview()
            make.height.equalTo(120)
        }
        btn.snp.makeConstraints { make in
            make.top.equalTo(tableView.snp.bottom).offset(10)
            make.left.right.equalToSuperview().offset(20)
        }
    }
    func initBindData() {
        tableView.delegate = self
        tableView.dataSource = self
        tableView.selectRow(at: IndexPath(row: seletedIndex, section: 0), animated: true, scrollPosition: .none)
        btn.rx.tap.subscribe(onNext: { [weak self] in

        })
    }
}
extension MainViewController: UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return items.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as UITableViewCell
        cell.textLabel?.text = items[indexPath.row].name
        cell.imageView?.image = UIImage(named: items[indexPath.row].icon)
        return cell
    }
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("indexPath::",indexPath)
        let cell = self.tableView.cellForRow(at: indexPath)
        cell?.accessoryType = .checkmark
    }
    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        let cell = self.tableView.cellForRow(at: indexPath)
        cell?.accessoryType = .none
    }
}

结果是第一行虽然被选中了但是并没有执行didSelectRowAt 所以accessoryType没生效要手动点一下这是什么原因呢

clipboard.png

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

扮仙女 2022-09-18 15:17:51

所有程序触发的动作,都不会发 action,否则不是很容易死循环了……
就像你设置 button.selected = YES,并不会走它的点击事件一样

戈亓 2022-09-18 15:17:51

官方API
// Selects and deselects rows. These methods will not call the delegate methods (-tableView:willSelectRowAtIndexPath: or tableView:didSelectRowAtIndexPath:), nor will it send out a notification.

  • (void)selectRowAtIndexPath:(nullable NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition;
  • (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated;
闻呓 2022-09-18 15:17:51

选中的阴影都出来了,代理没有走,会不会是这时候的设置的代理为nil了
想下apple的实现,既然已经选中了,那么代理不走,会不会是他要走代理的时候[self.delegate didsele...] self.delegate 为nil了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文