프로그래밍 방식으로 UITableView 섹션 제목을 설정하는 방법 (iPhone / iPad)?


106

UITableView사용하여 인터페이스 빌더를 만들었습니다 storyboards. 은 UITableView로 설정되어 static cells다른 부분의 숫자.

내가 겪고있는 문제는 여러 언어로 앱을 설정하려고한다는 것입니다. 이렇게하려면 UITableView어떻게 든 섹션 제목 을 변경할 수 있어야합니다 .

누군가 나를 도울 수 있습니까? 이상적으로는 사용하여 문제에 접근하고 싶지만 IBOutlets이 경우에는 이것이 가능하지 않다고 생각합니다. 어떤 조언과 제안이라도 정말 감사하겠습니다.

미리 감사드립니다.

답변:


280

UITableView delegatedatasource컨트롤러를 연결 하면 다음과 같이 할 수 있습니다.

ObjC

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {

    NSString *sectionName;
    switch (section) {
        case 0:
            sectionName = NSLocalizedString(@"mySectionName", @"mySectionName");
            break;
        case 1:
            sectionName = NSLocalizedString(@"myOtherSectionName", @"myOtherSectionName");
            break;
        // ...
        default:
            sectionName = @"";
            break;
    }    
    return sectionName;
}

빠른

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

    let sectionName: String
    switch section {
        case 0:
            sectionName = NSLocalizedString("mySectionName", comment: "mySectionName")
        case 1:
            sectionName = NSLocalizedString("myOtherSectionName", comment: "myOtherSectionName")
        // ...
        default:
            sectionName = ""
    }
    return sectionName
}

정적 셀을 사용하여 스토리 보드를 설정하면 실제로 호출되는 것이 확실합니까? 나는 그것이 호출되는 것 같지 않습니다.
drewish

7
아, numberOfSectionsInTableView:tableView:그것을 호출하기 위해 구현해야 할 것 같습니다 .
drewish 2012

정적 셀의 경우 (대부분) 다른 모든 데이터 소스 메서드가 구현되지 않습니다.
wcochran 2013 년

2
@drewish numberOfSectionsInTableView:tableView:는 IB에서 정적 셀용으로 구현되었습니다.
wcochran 2013 년

drewish가 맞습니다. 구현 numberOfSectionsInTableView:하면 title 메서드가 호출되고 스토리 보드를 덮어 씁니다. 이 정적에있는 tableview이기 때문에 그때는 방법을 재정의 꽤 괜찮아요 그 반환 일정 번호 @wcochran
GreatWiz

16

Swift로 코드를 작성하는 경우 다음과 같은 예가됩니다.

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String?
{
    switch section
    {
        case 0:
            return "Apple Devices"
        case 1:
            return "Samsung Devices"
        default:
            return "Other Devices"
    }
}

10

UITableViewDataSource 메서드 사용

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

5

titleForHeaderInSectionUITableView델리게이트 메소드 이므로 다음과 같이 섹션 쓰기의 헤더 텍스트를 적용합니다.

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
              return @"Hello World";
}

3

참고 -(NSString *)tableView: titleForHeaderInSection:경우 jQuery과에 의해 호출되지 않습니다 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)sectionjQuery과의 위임에 구현;


2
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
   return 45.0f; 
//set height according to row or section , whatever you want to do!
}

섹션 레이블 텍스트가 설정됩니다.

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *sectionHeaderView;

        sectionHeaderView = [[UIView alloc] initWithFrame:
                             CGRectMake(0, 0, tableView.frame.size.width, 120.0)];


    sectionHeaderView.backgroundColor = kColor(61, 201, 247);

    UILabel *headerLabel = [[UILabel alloc] initWithFrame:
                            CGRectMake(sectionHeaderView.frame.origin.x,sectionHeaderView.frame.origin.y - 44, sectionHeaderView.frame.size.width, sectionHeaderView.frame.size.height)];

    headerLabel.backgroundColor = [UIColor clearColor];
    [headerLabel setTextColor:kColor(255, 255, 255)];
    headerLabel.textAlignment = NSTextAlignmentCenter;
    [headerLabel setFont:kFont(20)];
    [sectionHeaderView addSubview:headerLabel];

    switch (section) {
        case 0:
            headerLabel.text = @"Section 1";
            return sectionHeaderView;
            break;
        case 1:
            headerLabel.text = @"Section 2";
            return sectionHeaderView;
            break;
        case 2:
            headerLabel.text = @"Section 3";
            return sectionHeaderView;
            break;
        default:
            break;
    }

    return sectionHeaderView;
}

2

다른 답변에는 문제가 없지만 이것은 작은 정적 테이블이있는 상황에서 유용 할 수있는 비 프로그래밍 솔루션을 제공합니다. 장점은 스토리 보드를 사용하여 현지화를 구성 할 수 있다는 것입니다. XLIFF 파일을 통해 Xcode에서 현지화를 계속 내보낼 수 있습니다. Xcode 9에는 현지화를 보다 쉽게 해주는 몇 가지 새로운 도구가 있습니다.

(실물)

비슷한 요구 사항이있었습니다. Main.storyboard (Base)에 정적 셀이있는 정적 테이블이 있습니다. .string 파일 (예 : Main.strings (German))을 사용하여 섹션 제목을 현지화하려면 스토리 보드에서 섹션을 선택하고 개체 ID를 기록해 둡니다.

개체 ID

그런 다음 내 경우에는 Main.strings (German) 문자열 파일로 이동하여 다음과 같은 번역을 삽입하십시오.

"MLo-jM-tSN.headerTitle" = "Localized section title";

추가 자료 :


1

이전 버전의 UITableView프로토콜에 대해서는 모르겠지만 iOS 9부터는 프로토콜의 func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String?일부입니다 UITableViewDataSource.

   class ViewController: UIViewController {

      @IBOutlet weak var tableView: UITableView!

      override func viewDidLoad() {
         super.viewDidLoad()
         tableView.dataSource = self
      }
   }

   extension ViewController: UITableViewDataSource {
      func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
         return "Section name"
      }
   }

delegate데이터로 테이블을 채우기 위해 를 선언 할 필요가 없습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.