본문 바로가기

IT/iOS

custom TableView Cell Button selector

커스텀으로 셀을 구성후 각각 셀마다 버튼을 눌러 그셀의 IndexPath를 전달&출력하는 방법

 

먼저 cell에 버튼셀렉터를 구현한다.


[cell.selectButton addTarget:self action:@selector(selectButtonPush:) forControlEvents:UIControlEventTouchUpInside];



그후 selectButtonPush메서드로 가서 다음의 코드를 입력한다.



customCell * cell = (customCell *)[[sender superview] superview]; 
NSIndexPath *indexPath = [_tableView indexPathForCell:cell];

그리고 로그를 출력 하면 내가 누른 셀의 로우값을 알아낼수 있고 그해당 셀에대해 명령을 할수 있다

 

다음은 섹션을 커스텀 하여 버튼을 만들었을때에 처리하는 방법이다.

먼저 TableView section 에 버튼을 만든다

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section  
{  
UIView *sectionView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 360, 27)]; 
[sectionView setBackgroundColor:[UIColor colorWithRed:0.821 green:0.846 blue:0.946alpha:1.000]]; 
UIButton *sectionButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[sectionButton setFrame:CGRectMake(40, 0, 40, 27)]; 
[sectionButton addTarget:self action:@selector(sectionButtonPush:)forControlEvents:UIControlEventTouchUpInside];
[sectionButton setTag:section]; 
[sectionView addSubview:sectionButton]; return sectionView; 
 }


 

그다음 해당버튼의 셀렉터에서 다음과 같은 코드를 입력한다.

  

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:[sender tag]];
customCell * cell = [_tableView cellForRowAtIndexPath:indexPath];

 

 

이외에도 여러가지 방법을 통해 알아낼수 있다. 

UIView *contentView = (UIView *)[sender superview];
customCell *cell = (customCell *)[contentView superview];
NSIndexPath *indexPath = [_tableView indexPathForCell:cell];

 

또는 


CGPoint touchPoint = [sender convertPoint:CGPointZero toView:_tableView];
NSIndexPath *indexPath = [_tableView indexPathForRowAtPoint:touchPoint];
customCell *cell = [_tableView cellForRowAtIndexPath:indexPath];
 

 

이상 전달끝