0

2つのTableViewControllerをインポートするViewControllerがあります。

これらのサブクラスでデリゲート/データソースメソッドを実行していますが、とにかく、ViewControllerは、各TableViewがデリゲートメソッドdidSelectRowAtIndexPathなどのメソッドを実行したことを通知できますか、セルがあった場合は、ポーリングのために各tableviewcontrollerにメソッドを追加する必要がありますか?選択されましたか?

ありがとう!

4

2 に答える 2

2

「MyDidSelectRowAtIndexPathNotification」などの独自の通知を定義し、メイン ビュー コントローラーをこの通知のオブザーバーにすることができます。

#define kMyDidSelectNotification @"MyDidSelectRowAtIndexPathNotification"
[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(myDidSelectAction:) name:kMyDidSelectNotification object:nil];

次に、 の実装でtableView:didSelectRowAtIndexPath、すべてのオブザーバーに対してこの通知をトリガーするだけです。

[[NSNotificationCenter defaultCenter] 
    postNotificationName:kMyDidSelectNotification object:nil];

UITableViewCell必要に応じて、またはその他のオブジェクトを通知に渡すことができることがわかります。通知のハンドラー (myDidSelectAction:この場合) はNSNotification、postNotification 操作で渡されたオブジェクトを含むオブジェクトを受け取ります。

プロトコルも機能しますが、私の見解では、セットアップはより複雑です。

Notification Centerのドキュメントをご覧ください。

于 2012-10-31T15:19:05.930 に答える
2

@protocol次のようなものを作成できます。

@protocol MyChildViewControllerDelegate<NSObject>
@optional
- (void)tablView:(UITableView *)tv didSelectRowInChildViewControllerAtIndexPath:(NSIndexPath*)indexPath;
@end

次のようにMyChildViewControllerDelegate、クラス内のプロパティを作成します。ChildViewController@synthesize

@property(assign, nonatomic) id<MyChildViewControllerDelegate> delegate;

親クラスのインスタンスを作成するときは、次のようChildViewControllerにデリゲートを割り当てます。self

ChildViewController *ch = [[ChildViewController alloc] initWithBlahBlah];
ch.delegate = self;

メソッドを実装しMyChildViewControllerDelegateます。

UITableViewDelegateコールバックを受け取ったときにChildViewController、デリゲートを通じて親クラスに伝えます。

- (void)tableView:(UITableView *)tView didSelectRowAtIndexPath:(NSIndexPath *)iPath
{
      [delegate tablView:tView didSelectRowInChildViewControllerAtIndexPath:iPath];
}

独自に作成する代わりに、MyChildViewControllerDelegate提供されている Apple を使用することもできますUITableViewDelegate(使い慣れている場合)。

それが役に立てば幸い :)

于 2012-10-31T14:55:39.363 に答える