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


Я создал UITableView в Interface Builder с помощью storyboards. Элемент UITableView настройки с static cells и ряд различных разделов.

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

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

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

8 99

8 ответов:

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

- (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?
{
    switch section
    {
        case 0:
            return "Apple Devices"
        case 1:
            return "Samsung Devices"
        default:
            return "Other Devices"
    }
}

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

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

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

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

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

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

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

(оригинал)

у меня было аналогичное требование. Я статическая таблица со статическими ячейками в моем основном.раскадровка (база). Для локализации заголовков разделов используется .строки файлов, например.строки (немецкий) просто выберите раздел в раскадровке и обратите внимание на идентификатор объекта

Object ID

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

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

Дополнительные Материалы:

Я не знаю о прошлых версиях 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 заполнить таблицу с данными.