ios的tableView是平時開發(fā)中用到的最常用的控件之一,通過自定義cell我們可以實現(xiàn)各種各樣的效果.在上面添加各種我們想要的控件.這次就講述如何獲點擊cell上的button從而獲取到后面的cell.
方法一
在創(chuàng)建cell的時候給button以tag值,tag值就是indexpath.row,用的時候直接用button.tag來取cell,但是此方法不適合多個section的tableview;方法二
通過superView 在button的點擊事件中一直用superView來獲取button的父視圖,此種方法太low,并且容易出錯.方法三 主要說這個
如果以上兩種不能滿足你(看到這,基本上是不能滿足了),那么這種方法一定適合你,先來看實現(xiàn)代碼
//首先為button添加點擊事件
[button addTarget:self action:@selector(buttonAction:event) forControlEvents:(UIControlEventTouchUpInside)];
//這里要傳兩個參數(shù),后面解釋第二個參數(shù)
-(void)buttonAction:(UIButton*)sender event:(id)event
{
NSSet *touches =[event allTouches];
UITouch *touch =[touches anyObject];
CGPoint Position = [touch locationInView:self.tableview];
NSIndexPath *indexPath= [self.tableview indexPathForRowAtPoint:Position];
if (indexPath!= nil) {
//這個indexpath就是button后面cell的indexpath
}
}
先看給button添加點擊事件的方法,那里傳的參數(shù)是不能夠自定義,第一個都是button本身都知道,那么如果再傳兩個參數(shù)會是什么?
做了個測試,如下圖

測試.png
可以看到,我穿了三個參數(shù),在控制臺輸出的時候第一個是UIButton,第二個和第三個都是UITouchesEvent,也就是說第二個參數(shù)以后都是UITouchesEvent,這個touchesEvent可以說是個UITouch的集合,里面的數(shù)量取決于是幾個手指點擊的,我用兩個手指點擊,效果如下.

兩個手指點擊控制臺輸出
NSSet *touches =[event allTouches];
UITouch *touch =[touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:self.tableview];
現(xiàn)在整體思路就很清晰了,通過第二個參數(shù),拿到觸摸事件,通過他來確定點擊的位置在tableView中的坐標(biāo)系,最后用indexPathForRowAtPoint這個方法來取到indexpath
還是最后一種有電水瓶.
轉(zhuǎn)載請注明作者,謝謝~
鑫 胖