[iOS] UITableViewCell 안에서 버튼, gesture 이벤트 시 Cell 찾기 (indexPath 찾기) iOS

UITableviewcell didSelectRowAtIndexPath: 

로 모든 처리를 할 수 있다면 좋겠지만, 불행히 클라이언트 들은 그리 쉬운걸 요청하지 않는다. 

UITableViewCell에 UIButton, UITapGestureReconizer 이벤트가 발생할 경우 해당 이벤트가 발생한 Cell 찾기.


1. cell 자체를 사용할 목적도 있지만, cell에 표시한 data를 찾는 목적이기도 하다. 

tableview의  numberOfRowsInSection: 에서 리턴값을 보통 dataArray.count 로 주고 있어서. 

dataArray는 당연 테이블뷰에 뿌릴 리스트고. 


중요한건 cellForRowAtIndexPath 에서 셀 버튼에 타겟을 추가해줘야한다는 점. 
그리고  addTarget:action:forControlEvents:  사용시

action에 @selector(clickCellButton:event:) event까지 추가해줘야한다는 점.

세세히 본다면 xib에서 드래그로 action 추가시에도 argument를 변경할 수 있다는걸 봤을 것이다. 

거기서 보이는 변경 가능한 argument, UIEvent 되시겠다.

귀찮으니 정리하면, 

- (void)clickCellButton:(UIButton*)sender event:(UIEvent*)event {
UITouch* touch = [[event allTouches] anyObject];
CGPoint point = [touch locationInView:tableView];
NSIndexPath* indexPath = [tableView indexPathForRowAtPoint:point];

UITableViewCell* buttonCell = [tableView cellForRowAtIndexPath:indexPath];
...

id data = dataArray[indexPath.row];
...
}

indexPath를 구했으니 cell도 가져오고, array에서 해당 데이터를 가져올 수 있겠지.


여기저기 cell의 버튼 클릭 시 cell을 구하는 것에 대한 것들이 있는데 요놈으로 나는 거의다 쓰고 있다.


====================================================================================================

사실, 별 것 아닌 내용이라 정리할 생각을 안하고 있었는데, 오늘 희한한 경험을 해서. 

tableView의 크기를 가변적으로 움직이도록 만들었다. 높이값이 0에서부터 최대값까지 늘어나는 식으로. 

해당 cell에는 이미지가 작게 썸네일로 되어 있어서 이미지를 클릭시 viewcontroller에 크게 보여주는 기능을 추가했는데, 

키보드와 테이블뷰 높이를 늘였다 줄였다하다보니 클릭한 위치에 맞는 indexPath 값이 나오질 않은 것. 

iOS10만의 문제이거나 시뮬레이터의 문제일려나 싶기도 한데. 일단 대충 에러나지 않게 처리해놓고 끝. 

수정 방법은 생각치 않는다. ㅋㅋㅋ





덧글

  • ASD 2017/11/12 19:10 # 삭제 답글

    cellForRowAtIndexPath 이 부분에서 오류가 No known class method for selector 'cellForRowAtIndexPath:' 이런 오류가 나오는데 어떻게 해야 될까요?..
댓글 입력 영역


adsence 160x600