2012-01-15 2 views
0

3 개의 항목이있는 테이블보기가 있는데 그 중 하나는 단추 뒤에 있습니다. 버튼이 선택되면, 그 버튼을 숨기고 그 뒤에있는 아이템을 드러내고 싶습니다. 테이블 뷰 셀을 사용하여 테이블 행을 표시하고 있습니다. 숨길 버튼을 하나 선택하면 테이블을 스크롤하면 더 많은 버튼이 숨겨집니다. 버튼을 숨기면 현재보기의 표시 가능한 행 내의 일부 위치를 기반으로 버튼이 숨겨져있는 것처럼 보입니다. 특정 행의 버튼을 숨기려고합니다.테이블 뷰 행의 버튼을 어떻게 든 인덱싱 할 수 있습니까?

버튼을 숨기려면 코드를 누를 때마다 NSLog에 쓸 수 있으며 한 번만 표시되지만 테이블을 스크롤하면 볼 수있는 다른 행에 버튼의 숨겨진 속성이 적용됩니다. 행 53의 버튼을 선택하면 행 53의 버튼 만 숨기고 120 행 테이블의 다른 행의 버튼은 숨기지 마십시오.

내가 한 일을 해 본 사람이 있습니까? 내가 무슨 일이 일어나고 있는지 알아낼 수있는 도움을 주시면 감사하겠습니다. 감사.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *ElementCellIdentifier = @"ElementCellIdentifier"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ElementCellIdentifier]; 
    if (cell == nil) { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ElementRowCell" 
               owner:self options:nil]; 
     if ([nib count] > 0) { 
      cell = self.tvCell; 
     } else { 
      NSLog(@"failed to load ElementRowCell nib file!"); 
     } 
    } 

    NSUInteger row = [indexPath row]; 

    UILabel *atomic_number = (UILabel *)[cell.contentView viewWithTag:1];        
    atomic_number.text = [NSString stringWithFormat:@"%d",elements_table[row].atomic_number]; 

    UILabel *element_name = (UILabel *)[cell.contentView viewWithTag:2]; 
    element_name.text = [NSString stringWithCString:elements_table[row].element_name]; 

    UILabel *element_symbol = (UILabel *)[cell.contentView viewWithTag:3]; 
    element_symbol.text = [NSString stringWithCString:elements_table[row].element_symbol]; 

    return cell; 
} 

- (IBAction)buttonPressed:(id)sender { 

NSLog(@"Getting to buttonPressed from row button"); 
UIButton *pressedButton = (UIButton *)sender; 
NSIndexPath *indexPath = [self.mainTableView indexPathForCell:  (UITableViewCell *)[sender superview]]; 
pressedButton.hidden = TRUE; 

}

+0

회원님이이 결과를 얻고있는 이유를 확인합니다. 'tableView : cellForRowAtIndexPath :'와 버튼을 숨기는 액션 메소드를 게시하십시오. – NJones

+0

저는이 포럼을 처음 사용합니다. 이 코멘트 란에 허용되는 문자 수를 초과합니다. 코드를 게시하려면 어떻게해야합니까? – Rick

+0

질문을 편집하여 코드를 추가하십시오. 질문의 텍스트 바로 아래에 질문 태그가 있습니다. 바로 아래에 편집 링크가 표시되어야합니다. – NJones

답변

0

죄송합니다. 기본적으로 특정 테이블보기 셀에 단추 인스턴스가 숨겨져 있습니다. 문제는 다른 행에 대해 dequeue'd가되면 상태를 복원하는 것이 아니라는 것입니다. 그리고 만약 당신이 단지 그것을 볼 수있는 상태로 복원했다면 당신이 클릭 한 행은 잊혀 질 것입니다. tableView:cellForRowAtIndexPath:에 상태를 올바르게 복원하려면 이미 클릭 한 행을 저장해야합니다.

어떻게 처리 할 것인가는 NSMutableSet *selectedIndexPaths;입니다. 그리고 이것을 사용하여 내가 선택한 행을 저장하십시오. 그런 다음 버튼을 클릭하면 해당 indexPath를 집합에 추가합니다. 문과 같이, 버튼의 숨겨진 속성을 설정하는 경우 tableView:cellForRowAtIndexPath: 사용에서 스크롤 할 때

- (IBAction)buttonPressed:(UIButton *)button{ 
    if (![button isKindOfClass:[UIButton class]]) return; 
    UIView *finder = button.superview; 
    while ((![finder isKindOfClass:[UITableViewCell class]]) && finder != nil) { 
     finder = finder.superview; 
    } 
    if (finder == nil) return; 
    UITableViewCell *myCell = (UITableViewCell *)finder; 
    NSIndexPath *indexPath = [self.mainTableView indexPathForCell:myCell]; 
    [selectedIndexPaths addObject:indexPath]; 
    button.hidden = TRUE; 
    NSLog(@"IndexPathRow %d",indexPath.row); 
} 

지금 제대로 상태를 복원하려면 다음

buttonPropertyName.hidden = ([selectedIndexPaths containsObject:indexPath]); 
+0

그건 내가 클릭하는 버튼을 숨기지 않지만,보기를 스크롤 할 때 숨겨진 다른 버튼이 있습니다. 시작한 곳으로 다시 스크롤하면 숨겨진 버튼이 더 이상 숨겨지지 않습니다. 하지만 다른 무작위 버튼이 있습니다. 아주 이상한. – Rick

+0

대단히 감사합니다. 나는 그것을 시도 할 것이다. 불행히도, 나는 지금 떠나야 만하고, 오늘 밤까지이 일로 되돌아 갈 수 없을 것입니다.하지만 제가 일하게되면 알려 드리겠습니다. 다시 한번 감사드립니다. – Rick

+0

내가 이미 선언 했어야하는 indexPathForCell이 있습니까? "신고되지 않은"오류가 나타납니다. – Rick

관련 문제