19

いつ、またはセクションに選択した値に関係なく、常に nil 値を取得するカスタム ヘッダー ビューを含むテーブルがあります。同じ問題を抱えた別のテーブルがあります。

[tableview subviews] の値を出力するとヘッダー ビューが表示されますが、メソッドが何も返さない理由がわかりません。

私がやろうとしているのは、headerview にある activityIndi​​cator を取得し、メソッド呼び出しで開始または停止することです。

ヘッダーは常に正常に描画されますが、参照を戻すことができません。また、呼び出しheaderViewForSection:はデリゲート メソッドを呼び出しませんが、それは正常ですか?

footerViewForSection:同じ問題があります

いくつかのコード:

- (UIView*) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {

    NSArray* objs = [[NSBundle mainBundle] loadNibNamed:@"iPadTableCells" owner:nil options:nil];
    UIView* header = [objs objectAtIndex: 0];

    UIActivityIndicatorView* activityIndicator = (UIActivityIndicatorView*) [header viewWithTag:5];
    [activityIndicator startAnimating]

    return header;

}

任意の方法から:

    UIView* headerView = [tableview headerViewForSection: section];  //returns nil

    if (headerView) {
        UIActivityIndicatorView* activityIndicator = (UIActivityIndicatorView*)[headerView viewWithTag: 5];
        [activityIndicator stopAnimating];
    }
4

3 に答える 3

17

答え

ドキュメントから:

テーブル ビューにヘッダー ビューまたはフッター ビューを認識させるには、それを登録する必要があります。registerNib:forHeaderFooterViewReuseIdentifier:のまたはregisterClass:forHeaderFooterViewReuseIdentifier:メソッドを使用してこれを行いますUITableView

(Swift に相当するものは register(_:forHeaderFooterViewReuseIdentifier:)です。)

そのため、nib を登録してから、再利用識別子を使用して取得する必要があります。これは、アプリ バンドルから直接取得するのではなく、現在行っていることです。

...headerViewForSectionメソッドを使用する場合。

代替回答

または、メソッド内で回転し続けるかどうかを確認してから、次のviewForHeaderInSection呼び出しを送信することもできます。

[self.tableView beginUpdates];
[self.tableView endUpdates];

セクション ヘッダーを更新します。

(この代替アプローチはビュー全体を破棄して再作成するため、大量のデータを含む大きなテーブルがある場合、あまり効率的ではない可能性があることに注意してください。)

于 2013-03-07T20:03:33.490 に答える
9

この質問が出されてからしばらく経ちましたが、最近、同様の問題に遭遇し、ここで自分の質問をしました: UITableView -headerViewForSection returns (null)
答えがあると思います。


前提条件の手順:

  1. UITableViewHeaderFooterViewサブクラスを作成して名前を付けるCustomHeaderView
  2. クラスのビュー インターフェイス nib ファイルを作成します (ここで名前を付けたようiPadTableCellsです) 。
  3. xib で、View を選択し、そのIdentity Inspectorで
    • カスタム クラスを次のように指定します。CustomHeaderView
  4. プロパティを作成し、合成して xib に接続します
    • @property (strong, nonatomic) IBOutlet UIActivityIndicatorView *activityIndicator;

次のコードを使用します。

- (UIView*) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    static NSString *HeaderIdentifier = @"header";
    CustomHeaderView *header = [tableView dequeueReusableHeaderFooterViewWithIdentifier:HeaderIdentifier];

    if(!header) {
        NSArray* objs = [[NSBundle mainBundle] loadNibNamed:@"iPadTableCells"
                                                      owner:nil
                                                    options:nil];
        header = [objs objectAtIndex: 0];
    }

    [header.activityIndicator startAnimating];
    return header;
}

次に、次の方法でアクセスできます。

CustomHeaderView *headerView = (CustomHeaderView*)[tableView headerViewForSection:section];
[headerView.activityIndicator stopAnimating];
于 2013-11-26T10:01:48.653 に答える
4

迅速に

UITableViewHeaderFooterView必要なのは、返す必要があるヘッダービューのインスタンスを作成することだけです

 func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let sectionHeaderView = UITableViewHeaderFooterView()
        //customize your view here
        return sectionHeaderView
    }
于 2016-06-08T00:00:34.100 に答える