2015-02-04 3 views
2

오른쪽에 셀 수가 적은 셀을 사용자 지정 셀로 설정했습니다. 내가 원하는 것은 스위치 변경 이벤트에 특정 셀의 값을 저장하는 것입니다. 테이블 뷰에는 번호 섹션이 있으므로 인덱스 경로를 얻기 위해 섹션과 행이 필요하므로 스위치 태그를 설정할 수 없습니다.섹션 기반 테이블보기에서 스위치 변경 이벤트시 셀의 인덱스 경로를 얻을 수있는 방법

어떤 대안을 제안하지만 섹션 기반 테이블보기에서 UISwitch를 사용해야합니다.

감사합니다.

+0

UISwitch 값 변경 선택기에서 셀 개체를 가져 오면 괜찮습니까? – Jageen

+0

예, UI 스위치 상태가 변경되었지만 어떤 스위치 통계가 변경되었는지를 결정할 수 없습니다. –

+0

내 대답을 참조하십시오 halp 수 있습니다 – Jageen

답변

6

사용자 지정 셀에 셀이 나타내는 정보를 식별하는 데 도움이되는 속성을 추가합니다. 인덱스 경로, 데이터 모델의 인덱스 등 ...

그런 다음 셀 스위치가 변경 될 때 UITableView 또는 다른 코드 조각을 알리기 위해 호출 할 수있는 셀에 블록 속성을 추가하십시오. 예 :

@property (nonatomic,copy) void (^onSwitchChange)(UITableViewCell *cell); 

사용자 지정 셀 코드 내에 UISwitch에 대한 동작 처리기를 추가하십시오. 셀이 발생하면 self.onSwitchChange (self)를 호출하면 onSwitchChange 블록을 등록한 코드에 스위치가 변경되었음을 알리고 셀을 알립니다. 이 수

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath (NSIndexPath *)indexPath 
{ 
    <snip> 

    YourUITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:yourCellIdentifier forIndexPath:indexPath]; 
    cell.onSwitchChange=^(UITableViewCell *cellAffected){ 
    // Add code to deal with the swicth switch using properties of cellAffected 
    ... Your handler code here ... 
    }]; 

    <snip> 
} 

당신은 테이블 뷰 컨트롤러의 모든 변경 사항을 처리 : 다음과 같이 셀을 만들 테이블보기에서

는 onSwitchChange 블록을 설정합니다. 희망이 도움이됩니다.

+0

그것은 매력처럼 작동합니다. 감사 –

0

큰 섹션의 최대 행에 대한 아이디어가있는 경우에도 섹션이 있어도 태그를 만들 수 있습니다. 예를 들어 섹션에 1000 개의 행이 있다고 생각되면 다음 수식을 사용하여 태그를 만들 수 있습니다.

section = tag/1000; 
row = tag%1000; 

당신이 섹션에서는 찾을 수있을 것이다 얼마나 많은 행의 아무 생각이 없을 경우 :

tag = section * 1000 + row; 

나중에 스위치의 당신의 IBAction를에서 당신은 다음 indexpath (부와 행) 사용을 찾을 수 있습니다 sender.superview.superview을 사용하여 셀을 제거하십시오 (계층 구조에 다른 뷰를 추가 한 경우주의하십시오).

Rory McKinnel의 answer은 여전히 ​​문제를 해결하는 가장 깨끗한 솔루션입니다.

1

@ 자겐의 답변이 작동합니다. 셀이 어떤 슈퍼 뷰인지 알아 내야했습니다. 내 것이 더 높은 레벨이었습니다.

UITableViewCell *cell = (UITableViewCell*)[sender superview].superview.superview; 
NSIndexPath *indexPath = [self.myTableView indexPathForCell:cell]; 
NSLog(@"Section %ld Row : %ld",(long)indexPath.section,(long)indexPath.row); // print row section and index 
관련 문제