在UITableView或UICollectionView的自定義cell中創建一button,在點擊該按鈕時知道該按鈕所在的cell在UITableView或UICollectionView中的行數。就是cell的 indexPath.row,下面以UITableView為例:
有兩種方法:
-(IBAction):(id)sender
{
1. 第一種方法,這個方便一點點,不用設置tag。
NSLog(@"MyRow:%d",[self.table indexPathForCell:((TableViewCell*)[[sender superview]superview])].row);
2. 第二種方法,這個需要加載cell時設置tag.不過也很方便。
NSLog(@"MyRow:%d",((TableViewCell*)[[sender superview]superview]).tag);
}
在UITableViewDataSource的協議方法里需要添加的代碼:
-(UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//刪除cell.contentView中所有內容,避免以下建立新的重復
int i = [[cell.contentView subviews] count] - 1;
for(;i >= 0 ; i--)
{
[[[cell.contentView subviews] objectAtIndex:i] removeFromSuperview];
}
//添加button
UIButton *but = [UIButton buttonWithType:UIButtonTypeCustom];
[but setBackgroundImage:[UIImage imageNamed:@"delete.png"] forState:UIControlStateNormal];
[but setFrame:CGRectMake(280, 10, 30, 30)];
[but setAlpha:0.8];
[but addTarget:self action:@selector(del:) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:but];
//設置Tag為cell 對應的indexPath row
for(id view in subviews)
{
if([view isKindOfClass:[UIButton class]])
{
[view setTag:[indexPath row]];
//[cell.contentView bringSubviewToFront:view];
}
}
}
//Button事件
-(void)del:(id)sender
{
for(UITableViewCell *cell in visiblecells)
{
if(cell.tag == button.tag)
{
//button.tag就是對應的[indexPath.row
}
NSLog(@"MyRow:%d",((TableViewCell*)[[sender superview]superview]).tag);
}
在UITableViewDataSource的協議方法里需要添加的代碼:
-(UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//刪除cell.contentView中所有內容,避免以下建立新的重復
int i = [[cell.contentView subviews] count] - 1;
for(;i >= 0 ; i--)
{
[[[cell.contentView subviews] objectAtIndex:i] removeFromSuperview];
}
//添加button
UIButton *but = [UIButton buttonWithType:UIButtonTypeCustom];
[but setBackgroundImage:[UIImage imageNamed:@"delete.png"] forState:UIControlStateNormal];
[but setFrame:CGRectMake(280, 10, 30, 30)];
[but setAlpha:0.8];
[but addTarget:self action:@selector(del:) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:but];
//設置Tag為cell 對應的indexPath row
for(id view in subviews)
{
if([view isKindOfClass:[UIButton class]])
{
[view setTag:[indexPath row]];
//[cell.contentView bringSubviewToFront:view];
}
}
}
//Button事件
-(void)del:(id)sender
{
for(UITableViewCell *cell in visiblecells)
{
if(cell.tag == button.tag)
{
//button.tag就是對應的[indexPath.row
}