Как установить заголовок раздела UITableView программно (iPhone /iPad)?

Я создал UITableView в Интерфейсном Разработчике, используя storyboards. UITableView настраивается с помощью static cells и количество разных разделов.

Проблема в том, что я пытаюсь настроить свое приложение на нескольких разных языках. Для этого мне нужно как-то изменить заголовки разделов UITableView.

Пожалуйста, кто-нибудь может мне помочь? В идеале я хотел бы подойти к этой проблеме, используя IBOutlets, однако я подозреваю, что в этом случае это даже невозможно. Любые советы и предложения будут очень благодарны.

Заранее спасибо.

99 голосов | спросил The Crazy Chimp 9 Mayam12 2012, 00:07:12

6 ответов


0

После подключения вашего UITableView delegate и datasource для вашего контроллера, вы можете сделать что-то вроде этого:

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

Swift

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
}
ответил Alladinian 9 Mayam12 2012, 00:27:53
0

Используйте метод UITableViewDataSource

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
ответил geraldWilliam 9 Mayam12 2012, 00:12:25
0

titleForHeaderInSection - это метод делегирования для UITableView , поэтому для применения текста заголовка записи раздела необходимо выполнить следующее,

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
              return @"Hello World";
}
ответил iAnkit 15 62014vEurope/Moscow11bEurope/MoscowSat, 15 Nov 2014 07:44:56 +0300 2014, 07:44:56
0

Обратите внимание, что -(NSString *)tableView: titleForHeaderInSection: не вызывается UITableView, если - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section реализован в делегате UITableView;

ответил Julian D. 29 PM00000010000002331 2015, 13:00:23
0
- (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;
}
ответил Manjeet 30 Maypm16 2016, 14:22:56
0
  

Нет ничего плохого в других ответах, но этот предлагает   непрограммное решение, которое может быть полезно в ситуациях, когда один   имеет небольшой статический стол. Преимущество в том, что можно организовать   локализации с использованием раскадровки. Можно продолжать экспортировать   локализация из Xcode через файлы XLIFF. Xcode 9 также имеет несколько новые инструменты для упрощения локализации .

(оригинал)

У меня было похожее требование. У меня была статическая таблица со статическими ячейками в моей Main.storyboard (Base). Чтобы локализовать заголовки разделов, используя .string файлы, например Main.strings (немецкий) просто выберите раздел в раскадровке и запишите идентификатор объекта

 ID объекта

Затем перейдите к вашему строковому файлу, в моем случае Main.strings (немецкий), и вставьте перевод как:

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

Дополнительные ресурсы:

ответил igoMobile 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 20 Sep 2017 15:21:35 +0300 2017, 15:21:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132