IOS table selectRow 方法选中cell 不触发 didSelectRowAt方法
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没生效要手动点一下这是什么原因呢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
所有程序触发的动作,都不会发 action,否则不是很容易死循环了……
就像你设置
button.selected = YES
,并不会走它的点击事件一样官方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.
选中的阴影都出来了,代理没有走,会不会是这时候的设置的代理为nil了
想下apple的实现,既然已经选中了,那么代理不走,会不会是他要走代理的时候[self.delegate didsele...] self.delegate 为nil了