[uitableview] 스토리 보드를 사용하여 사용자 정의 테이블 뷰 섹션 머리글 및 바닥 글을 구현하는 방법

스토리 보드를 사용하지 않고 간단히 UIView캔버스에 A 를 끌어다 놓고 레이아웃을 지정 tableView:viewForHeaderInSection하거나 tableView:viewForFooterInSectionoror 메소드 를 설정할 수 있습니다.

UIView를 캔버스로 드래그 할 수없는 StoryBoard로 어떻게 이것을 수행합니까?



답변

이 질문은 iOS 5에 대한 것이지만 향후 독자를 위해 효과적인 iOS 6 dequeueReusableHeaderFooterViewWithIdentifier대신에 사용할 수 있습니다 dequeueReusableCellWithIdentifier.

에서 또는 viewDidLoad중 하나를 호출하십시오 . 그런 다음에 전화하십시오 . 이 API에는 셀 프로토 타입을 사용하지 않지만 (NIB 기반보기 또는 프로그래밍 방식으로 작성된보기), 이는 대기열에서 제외 된 머리글 및 바닥 글을위한 새로운 API입니다.registerNib:forHeaderFooterViewReuseIdentifier:registerClass:forHeaderFooterViewReuseIdentifier:viewForHeaderInSectiontableView:dequeueReusableHeaderFooterViewWithIdentifier:


답변

프로토 타입 셀을 섹션 머리글 및 / 또는 바닥 글로 사용하십시오.

  • 추가 셀을 추가하고 원하는 요소를 넣습니다.
  • 식별자를 특정 것으로 설정하십시오 (제 경우에는 SectionHeader)
  • 구현하는 tableView:viewForHeaderInSection:방법 또는 tableView:viewForFooterInSection:방법을
  • [tableView dequeueReusableCellWithIdentifier:]헤더를 얻는 데 사용
  • tableView:heightForHeaderInSection:방법을 구현하십시오 .

(screenhot 참조)

-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    static NSString *CellIdentifier = @"SectionHeader";
    UITableViewCell *headerView = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (headerView == nil){
        [NSException raise:@"headerView == nil.." format:@"No cells with matching CellIdentifier loaded from your storyboard"];
    }
    return headerView;
}  

편집 : 헤더 제목을 변경하는 방법 (주석 질문) :

  1. 머리글 셀에 레이블 추가
  2. 라벨의 태그를 특정 번호로 설정하십시오 (예 : 123)
  3. 귀하의 tableView:viewForHeaderInSection:방법 에서 다음 을 호출하여 레이블을 가져옵니다.
    UILabel *label = (UILabel *)[headerView viewWithTag:123]; 
  1. 이제 라벨을 사용하여 새 제목을 설정할 수 있습니다.
    [label setText:@"New Title"];


답변

iOS 6.0 이상에서는 새로운 dequeueReusableHeaderFooterViewWithIdentifierAPI로 상황이 변경되었습니다 .

다음과 같이 요약 할 수 있는 가이드 (iOS 9에서 테스트 됨)를 작성했습니다 .

  1. 아강 UITableViewHeaderFooterView
  2. 서브 클래스 뷰로 펜촉을 생성하고 머리글 / 바닥 글에 다른 모든 뷰를 포함하는 컨테이너 뷰 1 개를 추가합니다.
  3. 펜촉을 등록하십시오 viewDidLoad
  4. 머리글 / 바닥 글을 다시 가져 오기 위해 구현 viewForHeaderInSection및 사용dequeueReusableHeaderFooterViewWithIdentifier

답변

스토리 보드의 프로토 타입 셀을 사용하여 iOS7에서 작동하게했습니다. 스토리 보드에 설정된 segue를 트리거하는 사용자 정의 섹션 헤더보기에 버튼이 있습니다.

Tieme의 솔루션으로 시작

pedro.m이 지적했듯이, 이것의 문제점은 섹션 헤더를 두드리면 섹션의 첫 번째 셀이 선택된다는 것입니다.

Paul Von이 지적했듯이 이것은 전체 셀 대신 셀의 contentView를 반환하여 수정됩니다.

그러나 Hons가 지적했듯이 해당 섹션 헤더를 길게 누르면 앱이 중단됩니다.

해결 방법은 contentView에서 gestureRecognizer를 제거하는 것입니다.

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
     static NSString *CellIdentifier = @"SectionHeader";
     UITableViewCell *sectionHeaderView = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

     while (sectionHeaderView.contentView.gestureRecognizers.count) {
         [sectionHeaderView.contentView removeGestureRecognizer:[sectionHeaderView.contentView.gestureRecognizers objectAtIndex:0]];
     }

     return sectionHeaderView.contentView; }

섹션 헤더보기에서 제스처를 사용하지 않는 경우이 작은 해킹이 완료된 것 같습니다.


답변

스토리 보드를 사용하는 경우 테이블보기에서 프로토 타입 셀을 사용하여 헤더보기를 레이아웃 할 수 있습니다. 고유 ID와 viewForHeaderInSection을 설정하면 해당 ID를 가진 셀을 대기열에서 빼고 UIView로 캐스트 할 수 있습니다.


답변

Swift 구현이 필요한 경우 허용 된 답변의 지침을 따르고 UITableViewController에서 다음 메소드를 구현하십시오.

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return tableView.dequeueReusableCell(withIdentifier: "CustomHeader")
}

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 75
}


답변

내가 생각해 낸 해결책은 기본적으로 스토리 보드를 도입하기 전에 사용한 것과 동일한 해결책입니다.

비어있는 새 인터페이스 클래스 파일을 작성하십시오. UIView를 캔버스로 드래그하여 원하는대로 레이아웃합니다.

펜촉을 수동으로로드하고 viewForHeaderInSection 또는 viewForFooterInSection 대리자 메소드의 적절한 머리글 / 바닥 글 섹션에 할당하십시오.

애플이 스토리 보드로이 시나리오를 단순화하고 더 좋고 더 간단한 솔루션을 계속 찾고 있었으면 좋겠다. 예를 들어 사용자 정의 테이블 머리글과 바닥 글은 추가하기가 쉽습니다.