我用 Interface Builder 创建了一个 UITableView。UITableView的设置包括 static cells和许多不同的部分。
UITableView
static cells
我遇到的问题是,我正在尝试用几种不同的语言设置我的应用程序。要做到这一点,我需要能够改变 UITableView部分的标题以某种方式。
有人能帮帮我吗?理想情况下,我想使用 IBOutlets来解决这个问题,但是我怀疑在这种情况下这是不可能的。如有任何意见和建议,我们将不胜感激。
IBOutlets
先谢谢你。
使用 UITableViewDataSource 方法
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
一旦你把你的 UITableView delegate和 datasource连接到你的控制器上,你可以这样做:
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; }
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协议的一部分。
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 不会调用 ;
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
如果您使用 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
然后转到您的字符串文件,在我的例子中是 Main.string (德语) ,并插入如下翻译:
"MLo-jM-tSN.headerTitle" = "Localized section title";