uitableview のインデックスが実際にいつ使用されるかを知る方法はありますか? Apple のドキュメントにはメソッドが見つかりませんが、他の誰かが何か知っているかどうか疑問に思っていました。基本的に、インデックスで選択されているセクションに応じて変化するテーブル ビューでアニメーションを作成したいと考えています。テーブル ビュー インデックスにアクセスせずにこれを行う方法がわかりません。
どんな助けでも大歓迎です。
ありがとう。
uitableview のインデックスが実際にいつ使用されるかを知る方法はありますか? Apple のドキュメントにはメソッドが見つかりませんが、他の誰かが何か知っているかどうか疑問に思っていました。基本的に、インデックスで選択されているセクションに応じて変化するテーブル ビューでアニメーションを作成したいと考えています。テーブル ビュー インデックスにアクセスせずにこれを行う方法がわかりません。
どんな助けでも大歓迎です。
ありがとう。
あまり洗練されたソリューションではありませんが、UITableViewをサブクラス化して、- (void)didAddSubview:(UIView *)subview;
最初に表示されたときにそれを監視できる場合があります。これは、サブビューやスーパービューの1つではなく、UITableViewに直接追加され、追加されたビューをインデックスとして認識できることを前提としています。また、最初に追加した後、削除して再度追加するのではなく、非表示にして表示することもできます。
UITableViewDataSource
デリゲート メソッドは、セクション インデックスから選択されたセクションを表す を-tableView:sectionForSectionIndexTitle:atIndex:
返します。NSInteger
データ ソース デリゲート (おそらくテーブル ビュー コントローラー) であるクラスで、このメソッドをオーバーライドします。
View Controller でプロパティを設定し、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
}
}
Key-Value Observing パターンは、オブジェクトの値がどこかで変化したときに何かをトリガーするための優れた一般的な方法です。Apple は、このトピックを紹介する優れた「クイック スタート」ドキュメントを作成しました。