2つのTableViewControllerをインポートするViewControllerがあります。
これらのサブクラスでデリゲート/データソースメソッドを実行していますが、とにかく、ViewControllerは、各TableViewがデリゲートメソッドdidSelectRowAtIndexPathなどのメソッドを実行したことを通知できますか、セルがあった場合は、ポーリングのために各tableviewcontrollerにメソッドを追加する必要がありますか?選択されましたか?
ありがとう!
2つのTableViewControllerをインポートするViewControllerがあります。
これらのサブクラスでデリゲート/データソースメソッドを実行していますが、とにかく、ViewControllerは、各TableViewがデリゲートメソッドdidSelectRowAtIndexPathなどのメソッドを実行したことを通知できますか、セルがあった場合は、ポーリングのために各tableviewcontrollerにメソッドを追加する必要がありますか?選択されましたか?
ありがとう!
「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のドキュメントをご覧ください。
@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(使い慣れている場合)。
それが役に立てば幸い :)