2009-12-03 5 views
8

셀을 선택한 경우 셀의 textLabel 및 detailTextLabel을 변경하려고합니다. 나는 다음을 시도했지만, 변화는 발생하지 않는다 :UITableViewCell이 선택되었을 때 textLabel을 어떻게 변경합니까?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    MyAppDelegate *appDelegate = (MyPhoneAppDelegate*)[[UIApplication sharedApplication] delegate]; 

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.detailTextLabel.text = @"xxxxx"; 
    cell.textLabel.text =  @"zzzzz"; 
    [tableView reloadData]; 
} 

답변

-1

하면 전체 테이블을 다시로드 대신은 선택한 셀을 다시 시도 했습니까? 이것은 더 나은 성능을해야합니다 내가 아니에요하지만 난 당신이 전체 테이블을 새로 고치면 선택이 손실되는 것을 가정

[cell setNeedsDisplay];

대신

[tableView reloadData];

의 (이것은 이유가 될 수 있습니다 결국 아무런 변화가 보이지 않습니다 ....)

+0

전화 교체를 고려 새로운 빈 테이블보기를 인스턴스화하는 것입니다 사용자 정의 셀보기를 사용한다면 어떨까요? – meridimus

+0

사용자 정의 셀보기는 UITableViewCell의 contentView로 설정된보기이므로 동일합니다. setNeedsDisplay는 contentView를 다시 그립니다. – yonel

2

셀을 선택하는 동안 테이블을 다시로드하지 마십시오. 당신이 레이블에 위의 변경 한 후 대신,

[휴대 setNeedsLayout]

을 시도합니다.

또한 메서드에서 응용 프로그램 대리인에 대한 참조를 만들고있는 이유가 있습니까?

+0

이것은 나를 위해 완벽하게 작동했습니다. 감사! – Nick

10

나는 표의 그림을 다시로드하면 실제로 tableView:cellForRowAtIndexPath:을 사용하는 모든 셀을 덤프하고 다시로드/표시하고 tableView:didSelectRowAtIndexPath: 메서드에서 업데이트 된 @ "xxxxx"및 @ "yyyyy"가 아닌 원래 데이터를 사용합니다. 새 아이 패드 프로젝트 (분할보기) 만들기

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

    UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.textLabel.text = @"it was tapped"; 
} 
0

하고 이제 클래스 -> 파일을 통해 이동 :

조금 테스트 프로젝트에서 나는 함께 선택에 라벨을 변경할 수 있었다. 가장 쉬운 방법이 거기에 주어졌습니다. XCode의 생성 코드.

샘플 코드 라인 : -

cell.textLabel.text = [NSString stringWithFormat:@"Row %d", indexPath.row]; 

당신은 당신이 선택 (indexPath 설명) 셀 다시로드 cellForRowAtIndexPath ||&& didSelectRowAtIndexPath ..

2

시도에서 사용할 수 있습니다

[yourTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone]; 
0

확실하지 무엇을 위임자와 함께하려고하지만 tableView가 이미 인스턴스화 된 것을 호출해야합니다. 즉, 어쩌면 내가 분명하지 않다

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath: indexPath]; 

전화 무슨 말인지하면

UITableViewCell *cell = [**tableView** cellForRowAtIndexPath: indexPath]; //cell has nothing it is new. 

이전

UITableViewCell *cell = [**self.tableView** cellForRowAtIndexPath: indexPath]; //now you have one that has a textField already in it 
+0

내가 무슨 말하는지 안 보이니? 이전 인스턴스가 아닌 새 인스턴스를 작성 중입니다. –

+0

새 테이블을 만들려면 데이터를 다시로드해야 테이블보기에서 데이터를 볼 수 있습니다. 이전 버전을 사용하면보기에 변경 사항이 반영됩니다. –

관련 문제