Как установить название раздела UITableView программно (iPhone/iPad)?
Я создал UITableView
в Interface Builder с помощью storyboards
. Элемент UITableView
настройки с static cells
и ряд различных разделов.
проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь настроить свое приложение на нескольких разных языках. Для этого мне нужно быть в состоянии изменить UITableView
заголовки разделов как-то.
пожалуйста, может кто-нибудь мне помочь? В идеале я хотел бы подойти к вопросу с помощью IBOutlets
однако я подозреваю, что это даже не возможно в этом случае. любой Совет и предложения были бы очень признательны.
спасибо заранее.
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 также имеет несколько новые инструменты для локализации легче.
(оригинал)
у меня было аналогичное требование. Я статическая таблица со статическими ячейками в моем основном.раскадровка (база). Для локализации заголовков разделов используется .строки файлов, например.строки (немецкий) просто выберите раздел в раскадровке и обратите внимание на идентификатор объекта
после этого перейдите в свой строковый файл, в моем случае 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
заполнить таблицу с данными.