2014-12-12 2 views
1

UILabel을 포함하는 사용자 지정 UITableViewCell이 있습니다. UITableViewCellUILabel이 셀을 완전히 덮는 것입니다.UITableView의 사용자 지정 셀에서 탭 감지

이제 사용자가 셀을 탭할 때마다이를 감지하고 싶습니다. 문제는 UILabel 셀을 감싸는 것으로 셀에 터치를 감지하는 데 사용할 수없는 UITableView 대리자 메소드입니다.

UILabel에 제스처 recoginzers를 사용하고 있지만 터치 된 셀의 색인을 얻지는 않습니다. 나는 또한 세포의 상단에 투명 버튼을 배치하는 것에 대해 생각했다. 그러나 여기에서도 접촉 된 세포의 인덱스를 얻을 수없는 동일한 문제가있다.

누구나 UILabel이 셀을 덮고있을 때 tableView didSelectRowAtIndexPath으로 도청 감지를 수행 할 수있는 방법을 안내해 줄 수 있습니까?

+0

레이블에 대한 사용자 상호 작용을 비활성화 한 다음 확인하십시오. –

+0

좋아, 이상한 일이 생겼어. 나는 모든 라벨에서 사용자 인터렉션을 사용할 수있게되었고, 이제 코드는 델리게이트 메소드를 호출하고있다. –

+0

나는 득시글 득시글 득시여 나의 대답에 그것을 되 찾을 수있다. –

답변

0

cell의 모든 레이블에서 userInteractionEnabled를 false로 설정하십시오. 이 셀에 건 드리면 UITableView 대리자를 사용할 수 있습니다. 셀이 계속 userInteractionEnabled = YES인지 확인하십시오.

+0

ok 체크 아웃 할 것입니다. –

+0

괜찮은 이상한 일이 생겼습니다. 모든 라벨에서 사용자 개입을 가능하게하고 코드가 위임 메소드를 호출하고 있습니다. –

0

didSelect 메서드 이외의 터치 이벤트를 얻으려면이 방법을 사용하십시오. 사용자 정의 셀 클래스에서 같은

typedef void(^TappedCell)(CustomCell *cell); 

을 블록을 추가하고, 그것을 위해

@property (nonatomic, strong) TappedCell tappedCell; 

을 속성을 추가하고 투명 버튼 액션

- (IBAction)buttonTapped { 

    if (self.tappedCell) { 
     self.tappedCell(self); 
    } 
} 

에 그리고 cellForRow 방법

을에
__weak type(self)weakSelf = self; 
cell.tappedCell =^(CustomCell *tappedCell) { 

    //Ur actions goes here 
    //for getting index 
    NSIndexPath *indexPath = [weakSelf.tableView indexPathForCell:tappedCell]; 
    [weakSelf someActionWithIndexPath:indexPath]; 
}; 
+0

이 방법의 이점은 다른 것보다 무엇입니까? –

+1

@Bhavin OP가 didSelectRow 이외의 대체 방법을 요구했는데, 그 이유는이 솔루션 때문입니다. 귀하의 경우 indexpath.row를 태그로 추가하고 버튼 액션에서 태그의 행을 결정합니다. 색인 행에 태그를 사용하면 표 행을 추가, 제거 또는 재정렬 할 수없는 경우에만 작동한다는 점에 유의하십시오. 또한 여러 섹션이있는 경우에도 문제가됩니다. 그래서 셀 내부에 사용자 정의 셀 버튼 동작을 유지하고 컨트롤러를보기 위해 콜백을 보내면 좋은 접근이 될 것입니다 – Akhilrajtr

+0

세부 설명에 대한 고맙습니다 –

0

UILabel 세포를 숨기거나 UIImageView 숨길 지 여부는 중요하지 않습니다. 자동으로 tableView didSelectRowAtIndexPath을 감지합니다. 먼저 문제가 발생하지 않았는지 확인하십시오. 먼저 테이블 뷰를 구현하려고 시도 했습니까?

관련 문제