1

こんにちは、私はグーグルで検索しましたが、答えが見つかりません。おそらくこれを行う別の方法があるので、コミュニティに投稿しています。

UIViewController にテーブルビューがあります。UIViewController は、テーブル ビューのデータソースおよびデリゲートです。次に、メインの UIViewController でのスクロールに反応する 2 つ目のコントローラーを用意します。理想的には、両方のコントローラーで scrollviewDidBeginScrolling が発生するように、2 番目のコントローラーもデリゲートにする必要があります。これを行うのは、コントローラー 2 をデリゲートとして設定し、テーブルビュー参照を渡すと、すべての面倒な作業が行われるため、コントローラー 2 の実装が非常に簡単になるためです。

基本的に、デリゲートの配列を tableView.delegate に渡すことはできますか? scrollViewDidBeginScrolling. 次のようなことをしなくても、同様のことを達成する方法はありますか

-(void)scrollViewDidBeginScrolling:(UIScrollView *)scrollView{
     [anotherViewController scrollviewDidScroll:scrollview];
     [otherView scrollViewDidScroll:scrollview];
}

テーブルビューの Pull To Refresh を処理するよりもコントローラーに使用しています。テーブルビューコントローラーの行/メソッドをできるだけ少なくして、実装をできるだけ簡単にしたいと考えています。

4

3 に答える 3

2

必要なことは達成できますが、デリゲートをチェーンする必要があります。テーブル ビューにはデリゲートが 1 つしかありませんが、テーブルビューのデリゲートであるビュー コントローラーで独自のカスタム デリゲート メソッドを定義し、他のビュー コントローラー自体をそのデリゲートに設定することができます。別の強引な方法は、通知を送信し、View Controller に通知を登録させることです。

于 2012-12-04T18:03:41.460 に答える
1

UIViewController1デリゲートメソッドでは、同じ呼び出しをUIViewController2デリゲートメソッドに送信するだけです。EI:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   [delegate2 tableView:tableView didSelectRowAtIndexPath:indexPath];
   // etc...

以下のコメントのために編集してください。UITableViewをサブクラス化して、複数のデリゲートプロパティまたはデリゲートプロパティの配列を指定できます。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   for(id delegate in _delegates)
       [delegate tableView:tableView didSelectRowAtIndexPath:indexPath];
   // Do nothing else, because the delegates handle everything.
}
于 2012-12-04T18:05:43.343 に答える
0

必要なのは、デリゲート多重化です。私はこれを行うためのクラスを作成しました:https ://github.com/aleph7/MultiDelegate

于 2013-03-19T17:16:40.210 に答える