TableView的accessoryButtonTappedForRow方法执行的时机

Posted 大熊猫侯佩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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方法执行的时机的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 UITableViewCell 的附件按钮作为 Popover 的锚点

如何使用tableview外的按钮将tableview移动到新的tableview

TableView里面的tableview cell swift 3

Swift:tableView 行的高度,其 tableView 单元格具有动态行数的嵌套 tableView

IOS:两个tableview的tableview委托方法

iOS tableview上textView在编辑状态时,tableview自动上移的功能