ios的tableView是平時(shí)開(kāi)發(fā)中用到的最常用的控件之一,通過(guò)自定義cell我們可以實(shí)現(xiàn)各種各樣的效果.在上面添加各種我們想要的控件.這次就講述如何獲點(diǎn)擊cell上的button從而獲取到后面的cell.
方法一
在創(chuàng)建cell的時(shí)候給button以tag值,tag值就是indexpath.row,用的時(shí)候直接用button.tag來(lái)取cell,但是此方法不適合多個(gè)section的tableview;方法二
通過(guò)superView 在button的點(diǎn)擊事件中一直用superView來(lái)獲取button的父視圖,此種方法太low,并且容易出錯(cuò).方法三 主要說(shuō)這個(gè)
如果以上兩種不能滿足你(看到這,基本上是不能滿足了),那么這種方法一定適合你,先來(lái)看實(shí)現(xiàn)代碼
//首先為button添加點(diǎn)擊事件
[button addTarget:self action:@selector(buttonAction:event) forControlEvents:(UIControlEventTouchUpInside)];
//這里要傳兩個(gè)參數(shù),后面解釋第二個(gè)參數(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) {
//這個(gè)indexpath就是button后面cell的indexpath
}
}
先看給button添加點(diǎn)擊事件的方法,那里傳的參數(shù)是不能夠自定義,第一個(gè)都是button本身都知道,那么如果再傳兩個(gè)參數(shù)會(huì)是什么?
做了個(gè)測(cè)試,如下圖
可以看到,我穿了三個(gè)參數(shù),在控制臺(tái)輸出的時(shí)候第一個(gè)是UIButton,第二個(gè)和第三個(gè)都是UITouchesEvent,也就是說(shuō)第二個(gè)參數(shù)以后都是UITouchesEvent,這個(gè)touchesEvent可以說(shuō)是個(gè)UITouch的集合,里面的數(shù)量取決于是幾個(gè)手指點(diǎn)擊的,我用兩個(gè)手指點(diǎn)擊,效果如下.
NSSet *touches =[event allTouches];
UITouch *touch =[touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:self.tableview];
現(xiàn)在整體思路就很清晰了,通過(guò)第二個(gè)參數(shù),拿到觸摸事件,通過(guò)他來(lái)確定點(diǎn)擊的位置在tableView中的坐標(biāo)系,最后用indexPathForRowAtPoint這個(gè)方法來(lái)取到indexpath
還是最后一種有電水瓶.
轉(zhuǎn)載請(qǐng)注明作者,謝謝~
鑫 胖