uitableviewのインデックスが実際に使用される時期を知る方法はありますか?
-
02-10-2019 - |
質問
uitableviewのインデックスが実際に使用される時期を知る方法はありますか? Appleのドキュメントには方法が見つかりませんが、他の誰かが何かを知っているかどうか疑問に思っていました。基本的に、インデックスで選択されているセクションに応じて変更されるテーブルビューでアニメーションを作成したいと思います。テーブルビューインデックスにアクセスせずにこれを行う方法がわかりません。
どんな助けも大歓迎です。
ありがとう。
解決
UITableViewDataSource
委任方法-tableView:sectionForSectionIndexTitle:atIndex:
andを返しますNSInteger
セクションインデックスから選択されたセクションを表します。この方法を、どのクラスでもデータソースデリゲート(おそらくテーブルビューコントローラー)でオーバーライドします。ビューコントローラーにプロパティをセットアップします。
NSInteger
呼び出されましたselectedSectionIndex
. 。その値は、前述のデリゲートメソッド内で設定されています。最後に、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に直接追加されること、および追加ビューをインデックスとして認識できることを想定しています。また、初めて追加された後、削除されて再び追加される代わりに、隠されて表示される可能性があります。