プログラムでUITableViewセクションのタイトルを設定する方法(iPhone / iPad)?


106

UITableView使用してInterface Builderでを作成しましたstoryboardsUITableView設定されstatic cells、別のセクションの数。

私が抱えている問題は、アプリをいくつかの異なる言語でセットアップしようとしていることです。これを行うには、UITableViewセクションのタイトルを何らかの方法で変更できる必要があります。

誰かが私を助けてくれませんか?理想的には、私はIBOutletsこれを使用して問題にアプローチしたいと思いますが、これはこの場合でも可能ではないと思います。アドバイスや提案は本当にいただければ幸いです。

前もって感謝します。

回答:


280

UITableView delegatedatasourceコントローラーに接続したら、次のようなことができます。

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

迅速

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
}

静的セルを使用してストーリーボードを設定すると、実際に呼び出されますか?呼び出されているようには見えません。
12

7
numberOfSectionsInTableView:tableView:それを呼び出すには実装する必要があるようです。
12

静的セルの場合、(ほとんど)他のすべてのデータソースメソッドは実装されていません。
wcochran 2013年

2
numberOfSectionsInTableView:tableView:静的セルのIBに@drewishが実装されました。
wcochran 2013年

drewishが正しい-を実装するnumberOfSectionsInTableView:と、titleメソッドが呼び出され、ストーリーボードが上書きされます。これは静的なテーブルビューなので、定数@wcochranを返すメソッドでオーバーライドしても問題ありません
GreatWiz

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


5

titleForHeaderInSectionUITableViewのデリゲートメソッドであるため、次のようにセクション書き込みのヘッダーテキストを適用します。

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

3

UITableViewのデリゲートに実装されている-(NSString *)tableView: titleForHeaderInSection:場合、UITableViewによって呼び出されないことに注意してください- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section


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)に静的セルを持つ静的テーブルがありました。Main.strings(German)などの.stringファイルを使用してセクションタイトルをローカライズするには、ストーリーボードでセクションを選択し、オブジェクト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テーブルにデータを入力するためにを宣言する必要はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.