2014-10-22 8 views
0

내 스토리 보드에 tableview를 넣고 태그에 "0"이 포함 된 단추를 셀에 채 웁니다. 배열을 사용하여 tableview 채 웠습니다. 내 배열에 20 개의 요소가 있다고 가정 해 봅시다. 테이블 뷰에서 20 개의 셀을 만듭니다. 이 코드는 각 셀의 버튼에 태그를 지정하는 데 사용하는 코드입니다.테이블보기의 단추 태그가 재설정됩니까?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (tableView == _tblCart) { 
     static NSString *cellIdentifier = @"CartCell"; 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
     cell.selectionStyle = UITableViewCellSelectionStyleGray; 

     UIButton *btn = (UIButton *)[cell viewWithTag:0]; 
     [btn setTag:indexPath.row]; 
     [btn addTarget:self action:@selector(logTag:) forControlEvents:UIControlEventTouchUpInside]; 

     return cell; 
    } 
    return nil; 
} 

내 코드는 정상적으로 작동 할 것이라고 생각했지만 실제로는 잘못된 것이 있습니다. 셀 0-5에서 버튼 태그가 정확합니다. 다음 셀에서 태그가 다시 0으로 재설정됩니다. 내가 잘못 했나요?

+0

귀하의 접근 방식은 정확하지, 나는 완전히 재사용 거시기 잊어 세포 지수 –

답변

1

또 다른 논리 문제가 있습니다. 테이블 셀을 재사용하고 있습니다.이 중 일부는 단추의 태그를 0이 아닌 다른 것으로 변경했습니다. 재사용 된 표 셀을 얻으면 시간이 많이 걸릴 것입니다. UIButton에는 0의 태그가 없으므로 정확하게 변경할 수 없습니다.

+0

로 버튼 태그를 설정할 필요가 없습니다. 고마워! :) –

1

뷰에 태그 식별자로 0을 설정하지 마십시오.
모든 UIView의 태그는 기본적으로 0입니다.

이렇게 [cell viewWithTag : 0];
은 아마도 셀의 contentView을 반환합니다.

0

Flexicoder와 l0gg3r 모두 정확합니다. 또한, 행 식별자로 버튼의 태그에 의존하는 것은 내 생각에 다소 까다로운 해결 방법입니다. 이 방법을 고려하십시오

- (void)logTag:(UIButton *)sender { 
    NSIndexPath *indexPath = [_tblCart indexPathForRowAtPoint:[_tblCart convertPoint:sender.center fromView:sender]]; 
    // do your stuff knowing which indexPath the button belongs to 
} 
관련 문제