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

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

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

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

미리 감사드립니다.



답변

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
}


답변

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"
    }
}


답변

UITableViewDataSource 메서드 사용

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


답변

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

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


답변

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


답변

- (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;
}


답변

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

(실물)

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

개체 ID

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

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

추가 자료 :