How to set the UITableView Section title programmatically (iPhone/iPad)?

我用 Interface Builder 创建了一个 UITableViewUITableView的设置包括 static cells和许多不同的部分。

我遇到的问题是,我正在尝试用几种不同的语言设置我的应用程序。要做到这一点,我需要能够改变 UITableView部分的标题以某种方式。

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

先谢谢你。

141048 次浏览

使用 UITableViewDataSource 方法

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

一旦你把你的 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
}

titleForHeaderInSection is a UITableView 的委托方法 so to apply header text of section write as follows,

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

我不知道 UITableView协议的过去版本,但是在 iOS9中,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来填充表中的数据。

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

如果您使用 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"
}
}
- (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;
}

其他答案没有错,但这个提供了一个 非编程解决方案,可能有用的情况下,一个 有一个小的静态表。好处是可以组织 使用故事板进行本地化。可以继续导出 通过 xlIFF 文件从 Xcode 进行本地化。

(原件)

我也有类似的要求。我的 Main.Storyboard (Base)中有一个带有静态单元格的静态表。使用。字符串文件,例如 Main.string (德语)只要选择故事板中的部分并注意对象 ID

Object ID

然后转到您的字符串文件,在我的例子中是 Main.string (德语) ,并插入如下翻译:

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

其他资源: