2014-10-24 4 views
0

UITableViewCell의 값을 사용자가 변경할 때이를 변경해야합니다.탭에서 UITableViewCell의 값을 변경하십시오.

값이 UITableViewCell 인 애니메이션을 사용하여 값을 수정해야합니다.

사용자가 UILabel에 도청 때 지금 내가하는 UITapGestureRecognizer 구현했습니다과 같이

:

-(void)tapOnBalance{ 
    NSString *headerIdentifier = @"HeaderCell"; 
    HeaderTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:headerIdentifier]; 
    cell.amountLabel.text = @"new Value"; // this will crash because at runtime 
    // the compiler won't recognize cell.amountLabel... 
} 
:

UITapGestureRecognizer *tapOnAmount = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOnBalance)]; 
[cell.amountLabel setUserInteractionEnabled:YES]; 
[cell.amountLabel addGestureRecognizer:tapOnAmount]; 

는, 응용 프로그램 충돌과 같이하는 방법 didTapOnBalance의 값을 변경

UITableViewCell에서 이것을 구현하면 HeaderTableViewCell의 값을 하위 클래스로 전송할 수 있으며 그 중 하나를 수행하는 방법을 알지 못합니다.

답변

2

새 셀을 비울 수 없으며 사용자가 탭한 셀을 제공하지 않습니다. 새 셀을 만듭니다. 그러나 탭 처리기를 조금만 변경하면 제스처에서 탭한 셀의 색인 경로를 가져올 수 있습니다.

UITapGestureRecognizer *tapOnAmount = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOnBalance:)]; 
[cell.amountLabel setUserInteractionEnabled:YES]; 
[cell.amountLabel addGestureRecognizer:tapOnAmount]; 

을 다음 핸들러에 다른 약간의 변화 :

당신은 (선택기보고) 제스처의 초기화에 약간의 변화가 필요

- (void)tapOnBalance:(UITapGestureRecognizer *)sender 
{ 
    CGPoint location = [sender locationInView:self.view]; 
    CGPoint locationInTableview = [self.tableView convertPoint:location fromView:self.view]; 
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:locationInTableview]; 

    // then you can either use the index path to call something like configureCell or send a didSelectRowAtIndexPath like this: 
    [self tableView:self.tableView didSelectRowAtIndexPath:indexPath]; 
} 
+0

멋지다 :) 나는 그것을 바로 구현하려고 노력할 것입니다. – bdv

+0

효과가있는 약간의 수정과 함께 굉장 !! – bdv

+0

기꺼이 도와 드리겠습니다! :) – SefTarbell

0

당신은 didSelecRowAtIndexPath를 구현하고

[self.myTableView reloadRowsAtIndexPaths:indexPath] withRowAnimation:UITableViewRowAnimationNone]; 

는 희망이 도움이 태핑 행을 애니메이션하기 위해이 값을 변경 한 후 그 안에 다음 코드 줄을 작성해야합니다!

+0

감사합니다! 불행히도'indexPath'는 델리게이트 메서드 외부에 있기 때문에 호출 할 수 없습니다. 그냥'tapOnBalance' 메소드 안에 있습니다. – bdv

+0

하위 클래스는 uitableview입니까? – ZAZ

+0

아니요 ... – bdv

1

코드가 완전히 잘못되었습니다.

사용자가 기존 셀을 탭하여 새 셀에 표시된 값을 변경하려고하면 새 셀이 생성됩니다. 그러지 마.

대신 테이블보기의 데이터 모델에서 데이터를 변경 한 다음 테이블보기에서 해당 셀을 다시로드하도록 지시하십시오 (ZAZ의 답변에서 설명한대로). 셀에 대한 새로운 정보를 반영하도록 데이터 모델을 변경 한 경우, 새 설정으로 표시됩니다.

+0

고마워요! 탭과 같은 이벤트에서 데이터 모델의 데이터를 변경하려면 어떻게해야합니까? – bdv

관련 문제