2012-04-25 6 views
0

특히 Checkmark, 특히 TableView 셀이 필요합니다.UITableView 셀의 체크 표시

그래서 내가 사용한 코드 :

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

newRow = [indexPath row]; 
oldRow = [lastIndexPath row]; 

if (newRow != oldRow) { 
    UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath]; 
    newCell.accessoryType = UITableViewCellAccessoryCheckmark; 

    UITableViewCell *oldCell = [tableView cellForRowAtIndexPath: lastIndexPath]; 
    oldCell.accessoryType = UITableViewCellAccessoryNone; 

    lastIndexPath = indexPath; 
} 
else{ 
    UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath]; 
    newCell.accessoryType = UITableViewCellAccessoryCheckmark; 
    lastIndexPath = indexPath; 
}} 

아이폰 시뮬레이터 벌금에서 작업. 그러나 iPhone 장치에서 테스트하는 동안 응용 프로그램이 충돌합니다.

이 문제에 대한 해결책은 무엇입니까?

미리 감사드립니다.

+0

충돌 오류 메시지 란 무엇입니까? – lnafziger

+0

EXE_BAD_ACCESS for oldRow = [lastIndexPath row]; –

답변

2

가장 큰 원인은 ivar 인 lastIndexPath입니다. 값을 저장하지 않고이 값을 저장하면 언제든지 해제 될 수 있습니다. lastIndexPath (수동 참조 계산의 경우 retain, 자동 참조 계산의 경우 strong) 속성을 정의 해보십시오. 그런 다음 self.lastIndexPath = indexPath 또는 [self setLastIndexPath:indexPath]을 사용할 수 있습니다.

또한 셀 내용을 강제로 변경하는 것은 좋지 않습니다. 선택한 인덱스를 저장 한 다음 테이블 데이터를 다시로드하는 것이 좋습니다. 효율성을 극대화하려면 변경된 셀만 업데이트하십시오. cellForRowAtIndexPath: 방법으로 확인 표시를 켜거나 끕니다.

+0

감사합니다. 나는 당신이 제안한대로 사용했습니다. lastIndexPath (NSIndexPath)에 대한 속성을 만들고이를 합성합니다. 그리고 시뮬레이터에서 잘 작동합니다. 하지만 여전히 아이폰 장치의 문제. –

+1

새 속성을 완전히 사용하고 있습니까? 당신은'oldRow = [lastIndexPath row];를'oldRow = [[self lastIndexPath] row];로 대체하고'lastIndexPath = indexPath;'와'[self setLastIndexPath : indexPath]; – Dondragmer

+0

그래 .. 시도해 봤어 .. SIGABRT를 던졌습니다. –

0

"cellForRowAtIndexPath"메소드에 다음 코드를 작성하기 만하면됩니다.

[[cell imageView] setImage:[UIImage imageNamed:@"tickmarkBlue.png"]]; 
[[cell imageView] setHidden:YES]; 

if(<your condition here>) 
{ 
     [[cell imageView] setHidden:NO]; 
} 
+0

'cellForRowAtIndexPath :'에 변경 사항을 적용하는 것은 정확합니다. 그러나 이것은 원래의 포스터의 충돌 문제를 직접적으로 다루지는 않습니다. 또한이 코드는'[cell setAccessoryType : UITableViewCellAccessoryCheckmark]'가 적합하지 않은 작업을 위해 작성 되었습니까? – Dondragmer

관련 문제