uitableviewのインデックスが実際に使用される時期を知る方法はありますか?

StackOverflow https://stackoverflow.com/questions/2762905

  •  02-10-2019
  •  | 
  •  

質問

uitableviewのインデックスが実際に使用される時期を知る方法はありますか? Appleのドキュメントには方法が見つかりませんが、他の誰かが何かを知っているかどうか疑問に思っていました。基本的に、インデックスで選択されているセクションに応じて変更されるテーブルビューでアニメーションを作成したいと思います。テーブルビューインデックスにアクセスせずにこれを行う方法がわかりません。

どんな助けも大歓迎です。

ありがとう。

役に立ちましたか?

解決

  1. UITableViewDataSource 委任方法 -tableView:sectionForSectionIndexTitle:atIndex: andを返します NSInteger セクションインデックスから選択されたセクションを表します。この方法を、どのクラスでもデータソースデリゲート(おそらくテーブルビューコントローラー)でオーバーライドします。

  2. ビューコントローラーにプロパティをセットアップします。 NSInteger 呼び出されました selectedSectionIndex. 。その値は、前述のデリゲートメソッド内で設定されています。

  3. 最後に、View Controllerにオブザーバーをセットアップします。これは、このプロパティの変更を待ち、変更が観察されたときに希望するコードをトリガーします。

あなたの中で -viewWillAppear: 方法、例:

[self addObserver:self forKeyPath:@"selectedSectionIndex" options:NSKeyValueObservingOptionNew context:nil];

あなたの中で -viewWillDisappear: 方法、オブザーバーの登録解除:

[self removeObserver:self forKeyPath:@"selectedSectionIndex"];

これを行うことが重要です -dealloc メソッドは例外をスローしません。

最後に、変更があるときに何かをするためにオブザーバー方法を設定します selectedSectionIndex:

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if ([keyPath isEqual:@"selectedSectionIndex"]) { 
        // The section index changed, so trigger some cool animation
    }
}

キー価値の観察パターンは、オブジェクトの値がどこかに変化したときに何かをトリガーする良い一般的な方法です。 Appleは良いと書いています 「クイックスタート」ドキュメント これがこのトピックを紹介します。

他のヒント

あまりエレガントなソリューションではありませんが、uitableviewをサブクラスしてそれを見ることができるかもしれません - (void)didAddSubview:(UIView *)subview; それが最初に現れるとき。これは、サブビューやスーパービューのいずれかではなく、uitableviewに直接追加されること、および追加ビューをインデックスとして認識できることを想定しています。また、初めて追加された後、削除されて再び追加される代わりに、隠されて表示される可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top