首页 > 代码库 > TableView的accessoryButtonTappedForRow方法执行的时机
TableView的accessoryButtonTappedForRow方法执行的时机
敲代码时遇到了这个问题,别偷懒,写下来备查.
当你在IB中对TableView中的accessory(注意,我说的是cell中的accessory,而不是cell)创建segue时,如果你在VC中同时实现以下3个方法,请问调用的次序是神马!?
//1
func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath)
//2
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool
//3
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
答案是:2,1,3
如果你使用shouldPerformSegue,那么你在该方法里是无法取到segue本身的,你必须配合prepare方法才可以.
如果你需要在prepare方法里取得被按下accessory对应的cell的索引,那么你不可以使用tableView.indexPathForSelectedRow,因为你segue绑定的是cell的accessory而不是cell,所以你取得的返回值是nil.
要想解决以上问题非常简单prepare第二个参数sender就是了:
let cell = sender as! UITableViewCell
let selectedRow = tableView.indexPath(for: cell)!.row
如果你是自定义cell的accessory按钮,那么你可能回用得着下面这个方法:
tableView.indexPathForRow(at: point)
下面是等效的objC的代码,留个念想:
NSSet *touches = [event allTouches];
UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:self.contactsTableView];
TableView的accessoryButtonTappedForRow方法执行的时机
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。