2010-07-12 4 views
0

UIControl 클래스 Foo가 인스턴스화되는 인스턴스가 여러 개 있습니다. 하나의 인스턴스가 UITableView의 각 셀에 해당합니다. 각 foo는 이미지가 눌러지면 셀렉터를 통해 셀의 왼쪽에있는 이미지를 토글합니다 (체크 표시, 체크 표시 없음). 또한 각 인스턴스에게 태그를 지정했습니다 행에 이미지를 터치하면, 그 사람이 "선택"되도록해당 태그로 클래스 인스턴스 호출

foo.tag = indexPath.row; 

셀의 중심은 사람의 이름이 있습니다. 셀의 오른쪽에는 사람에 대한 세부 정보를 얻기위한 세부 정보 공개 버튼이 있습니다.

위의 모든 작업이 정상적으로 작동합니다.

셀의 가운데 부분은 지금 아무 것도하지 않지만 행의 이미지를 터치 한 것처럼 똑같이하고 싶습니다. 사람을 선택하기 위해 이미지를 터치해야한다는 것이 항상 명확하지는 않습니다.

이제 didSelectRowAtIndexPath가 비어 있습니다. 내 생각은 didSelectRowAtIndexPath에서 행의 이미지 (이미지 토글 클래스의 인스턴스)에 해당하는 선택기를 해당 태그로 호출하는 것이 었습니다.

이렇게하는 것이 의미가 있으며, 그렇다면 어떻게해야합니까?

감사합니다.

답변

1

태그를 각 셀에서 동일하게 설정하십시오.

foo.tag = kFooTag; 

didSelectRow에서 셀을 가져온 다음 셀에서 foo를 가져옵니다.

-(void) tableView:(UITableView *)table didSelectRowAtIndexPath:(NSIndexPath *)path { 
    UITableViewCell *cell = [table cellForRowAtIndexPath:path]; 
    UIView *foo = [cell viewWithTag:kFooTag]; 
    // do something with foo 
} 

foo를 cell.contentView에 추가 한 경우 viewWithTag를 호출하십시오.

+0

매우 좋습니다! 완벽하게 작동합니다. 감사. 방금 토글 메서드를 호출합니다. [foo toggleImage]; 그게 그 것입니다. 경고 (이해할 수 있음)가 나타납니다. 경고 : 'UIView'가 '-toggleImage :'에 응답하지 않을 수 있지만이를 제거하는 방법을 알고 있습니까? 감사. –

+0

viewWithTag는'UIView *'를 반환하지만, foo가 가지고있는 타입으로 타입 변환하거나'id' ​​타입을 사용할 수 있습니다. – drawnonward

+0

예, 내 클래스는 ToggleImageControl이라고합니다. [(ToggleImageControl *) foo toggleImage]; 경고를 삭제했습니다. 덕분에 다시 . –

0

테이블 뷰의 DataSource는 모든 실제 인스턴스를 보유해야합니다. 인덱스와 데이터 소스를 사용하여 인스턴스를 가져 오는 것이 가장 좋은 이유는 무엇입니까?

+0

데이터 소스에는 사람들의 이름 만 있습니다. cellForRowAtIndexPath에서 각 행마다 하나의 foo를 인스턴스화하여 태그와 셀렉터를 할당하므로 인스턴스가 실제로 데이터 소스의 일부로 저장되지 않습니다 –

관련 문제