Interface BuilderでUITableView
を使用してstoryboards
を作成しました。 UITableView
は、static cells
といくつかの異なるセクションでセットアップされます。
私が抱えている問題は、いくつかの異なる言語でアプリをセットアップしようとしていることです。これを行うには、UITableView
セクションのタイトルを何らかの方法で変更できる必要があります。
誰かが私を助けてくれますか?理想的にはIBOutlets
を使用して問題にアプローチしたいと思いますが、この場合はこれも不可能だと思います。アドバイスや提案は本当にありがたいです。
前もって感謝します。
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;
}
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
}
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はITableViewのデリゲートメソッドであるため、セクションのヘッダーテキストを適用するには、次のように記述します。
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
return @"Hello World";
}
-(NSString *)tableView: titleForHeaderInSection:
がUITableViewのデリゲートで実装されている場合、- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
はUITableViewによって呼び出されないことに注意してください。
他の答えに問題はありませんが、これは小さな静的テーブルがある状況で役立つかもしれない非プログラム的なソリューションを提供します。利点は、ストーリーボードを使用してローカライズを整理できることです。 XLIFFファイルを介してXcodeからローカライズをエクスポートし続けることができます。 Xcode 9には、いくつかの ローカライズを行うための新しいツール がさらに簡単になっています。
(元の)
同様の要件がありました。 Main.storyboard(Base)に静的セルを持つ静的テーブルがありました。 .stringファイルを使用してセクションタイトルをローカライズするにはMain.strings(ドイツ語)は、ストーリーボードのセクションを選択し、オブジェクトIDを書き留めます。
その後、私の場合はMain.strings(German)の文字列ファイルに移動し、次のような翻訳を挿入します。
"MLo-jM-tSN.headerTitle" = "Localized section title";
- (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;
}
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
を宣言する必要はありません。