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

102

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

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

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

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

Ваш Ответ

8   ответов
14

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String?
{
    switch section
    {
        case 0:
            return "Apple Devices"
        case 1:
            return "Samsung Devices"
        default:
            return "Other Devices"
    }
}
2
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
   return 45.0f; 
//set height according to row or section , whatever you want to do!
}
<,p>section label text are set.

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

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


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

    UILabel *headerLabel = [[UILabel alloc] initWithFrame:
                            CGRectMake(sectionHeaderView..origin.x,sectionHeaderView..origin.y - 44, sectionHeaderView..size.width, sectionHeaderView..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;
}
5

titleForHeaderInSection этоdelegate method of UITableView чтобы применить текст заголовка раздела напишите следующим образом:

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

non-programmatic solution that may be useful in situations where one has a small static table. The benefit is that one can organize the localizations using the storyboard. One may continue to export localizations from Xcode via XLIFF files. Xcode 9 also has several new tools to make localizations easier.

(Оригинал)

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

Object ID

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

"MLo-jM-tSN.headerTitle" = "Localized section title";
Additional Resources: Apple WWDC 2017 Medium Article on Localization ~ Xcode 9 / Swift 4
265

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
}
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceedednumberOfSectionsInTableView:Error: User Rate Limit Exceeded
Error: User Rate Limit ExceedednumberOfSectionsInTableView:tableView:Error: User Rate Limit Exceeded
Error: User Rate Limit ExceedednumberOfSectionsInTableView:tableView:Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
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 заполнить вашу таблицу данными.

10

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

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

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