2013-04-10 1 views
3

을 오버라이드하여 정적 인 UITableViewCell을 숨기는 방법에 대한 많은 예제를 살펴 봤습니다. 지금은 제대로 작동하지는 않지만, 내가 뭔가 잘못하고 있는지보고 싶어서 너무 성가시다.heightForRowAtIndexPath를 재정 의하여 가능한 경우에만 정적 UITableViewCell의 높이를 변경 하시겠습니까?

나는 약 8 개의 행이있는 테이블보기가있는 UITableViewController입니다. 내 애플 리케이션 의이 화면은 하나의 개체를 보여줍니다, 예를 들어 한 행은 설명, 하나는 이미지, 하나는지도보기를 보유하고 있습니다. 모든 행은 정적입니다.

표시되는 개체 중 일부에지도가 없기 때문에 mapview이 들어있는 행을 숨기려고합니다. 정적 행이므로 해당 행의 콘센트 속성 (예 : @property (weak, nonatomic) IBOutlet UITableViewCell *mapViewRow;)을 사용하면 그 행의 높이를 0으로 설정하거나 viewDidLoad 또는 viewWillAppear 행을 숨길 수 있습니다. 그러나이 작업을 수행하는 유일한 방법은 heightForRowAtIndexPath 메서드를 재정의하는 것입니다.이 코드는 내 코드에서지도 행의 인덱스를 하드 코딩해야하기 때문에 일종의 성가신 방법입니다 (예 : 그것은 처음에 스토리 보드에서 그들을 설정하는 점을 패배처럼 물론

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (indexPath.row == 6 && self.displayItem.shouldHideMap) { 
     return 0; 
    } 
    return [super tableView:tableView heightForRowAtIndexPath:indexPath]; 
} 

아니라 큰 문제지만, tableview정적 행 크기의 단지 전체 방법은 같다.

+0

정적 행이있는 정적 tableView가 있으므로 하드 코딩 된 인덱스는 괜찮습니다. 나는 절대 숫자를 숨기는 enum을 사용하고있다. – JOM

답변

2

편집 - 내 대답

뒤에 근거는 전체 테이블 또는 행을 포함하는 부분 집합 중 하나를 다시로드해야합니다 행의 높이를 변경합니다. B/c 테이블 높이가 0 인 행에 약간 이상한 점이 있습니다. 행이 테이블에 존재하지 않도록 데이터 소스를 수정하는 것이 좋습니다.

이렇게하는 방법에는 여러 가지가 있습니다. 배열의 각 행이 적절한 데이터가있는 테이블의 행에 해당하는 displayItem에서 배열을 만들 수 있습니다. 이 배열을 다시 작성한 다음 [tableView reloadData]을 호출하십시오. 내 원래의 대답은 또한 0 또는 1 행을 가진 섹션으로 각 데이터 요소를 처리하여 원치 않는 행을 제거합니다.

ORIGINAL 답변

은 당신의 tableview 일반 또는 그룹화 스타일인가? 일반 스타일 인 경우 각 행을 0 또는 1 행의 섹션으로 처리 할 수 ​​있습니다. tableView dataSource 및 delegate 메소드에서 섹션 색인을 사용하여 해당 섹션을 염려하는 self.displayItem 내의 데이터를 식별합니다.

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 8; // max number of possible rows in table 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    NSInteger rows = 1; 

    // set self.mapSectionIndex during initialization or hard code it 
    if (section == self.mapSectionIndex && self.displayItem.shouldHideMap) { 
     rows = 0; 
    } 
    return rows; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:indexPath 
{ 
    return 60.0f; // whatever you want the height to be 
} 

// also modify tableView:cellForRowAtIndexPath: and any other tableView delegate and dataSource methods appropriately 
0

당신이 heightForRowAtIndexPath을 무시할 수 있습니다 단지> =이 UILabel 높이가 그대로 셀은 자동으로 높이를 계산하게됩니다 그것을 return UITableViewAutomaticDimension;에 쓰기 :

코드는 무언가 같이 될 것입니다. 그것은 나를 위해 일했다.

관련 문제