如何以编程方式设置UITableView节标题(iPhone / iPad)?


106

我已经使用创建了一个UITableView在Interface Builder中storyboards。的UITableView是设置有static cells与多个不同的部分。

我遇到的问题是我试图以几种不同的语言设置我的应用程序。为此,我需要能够以UITableView某种方式更改节标题。

有人可以帮我吗?理想情况下,我想使用来解决该问题,IBOutlets但是我怀疑在这种情况下这甚至是不可能的。任何意见和建议将不胜感激。

提前致谢。

Answers:


280

一旦你连接你的UITableView delegatedatasource你的控制器,你可以这样做:

对象

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

如果使用静态单元格设置故事板,您确定实际上会被调用吗?我似乎不被调用。
提请

7
嗯,看来您必须执行numberOfSectionsInTableView:tableView:才能将其调用。
提请

对于静态单元格,(大多数)所有其他数据源方法均未实现。
wcochran

2
numberOfSectionsInTableView:tableView:IB中为静态单元实现的@drewish 。
wcochran

drewish是正确的-如果实现numberOfSectionsInTableView:,则将调用title方法并覆盖情节提要。由于这是静态表格视图,因此可以使用返回常数@wcochran的方法覆盖它
GreatWiz 2014年

16

如果您是用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"
    }
}

10

使用UITableViewDataSource方法

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

5

titleForHeaderInSectionUITableView委托方法,因此可以如下应用段写入的标题文本,

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

3

注意,-(NSString *)tableView: titleForHeaderInSection:如果- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section在UITableView的委托中实现,则不会由UITableView调用;


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

2

其他答案没什么问题,但是这个答案提供了一种非编程的解决方案,该解决方案在静态表较小的情况下很有用。好处是可以使用情节提要来组织本地化。可以继续通过XLIFF文件从Xcode导出本地化。Xcode 9还提供了一些新工具来简化本地化

(原版的)

我有类似的要求。我的Main.storyboard(Base)中有一个带有静态单元格的静态表。要使用.string文件(例如Main.strings(German))本地化章节标题,只需在情节提要中选择该章节并记下Object ID

对象ID

然后转到您的字符串文件,在我的情况下为Main.strings(German),然后插入翻译:

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

其他资源:


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即可使用数据填充表格。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.