そのため、現在、特定のケースが発生した場合にloginviewcontrollerの上にモーダルに表示されるtableviewcontrollerがあり、ユーザーがセルを押すと、タイトルが親View Controllerに渡される必要があります。
したがって、(A) 親 - メインビュー、(B) ログイン、(C) テーブルビューコントローラーの図...
C は、ナビゲーション スタックではなくモーダル スタックを介して、A の上にある B の上にあります。したがって、C には、これ以外の A への参照はありません。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self Login];
[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}
ユーザーがセルを押すと、ビューは (A) に直接移動するため、(C) から (A) に (B) をスキップします。これは私が望んでいたものです...しかし、問題は、(A)を再度インスタンス化することなく、データを(A)に渡す方法です。つまり、アプリの起動の最初に既にインスタンス化されており、ユーザーがまだログインしていない場合は (B) が (A) の上に表示されます。したがって、(A) は常に読み込まれますが、データを渡すにはどうすればよいですかそれに?
提供すべき情報がさらにある場合は、お知らせください。できるだけ早く編集します。
編集 これに関連するいくつかの質問を見ましたが、NSNotificationを使用しますか? それとも委任?両方を使用しようとしましたが、実際には機能しませんでした...以前に回答した委任に関する質問を参照して、委任ソリューションを実装しましたが、(A) で (C) をインスタンス化する必要があります。しかし、私はすでに (B) で (C) をインスタンス化しています。私が使用するつもりだったが使用しなかった委任ソリューションは次のとおりです。使用しようとした NSNotification ソリューションのリンクは次のとおりです。
これをviewDidLoadの親コントローラーに入れます
- (void) viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[self makeCallbacks];
// get register to fetch notification
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(yourNotificationHandler:)
name:@"MODELVIEW DISMISS" object:nil];
}
//Now create yourNotificationHandler: like this in parent class
-(void)yourNotificationHandler:(NSNotification *)notice{
str = [notice object];
}
あなたの子クラスに以下を入れてください
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
NSLog(@"%@", cell.textLabel.text);
// cell.textLabel.text logs this -> EDF ENRS
[[NSNotificationCenter defaultCenter] postNotificationName:@"MODELVIEW DISMISS" object:cell.textLabel.text];
[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}
ログに「str」(null) が出力されると
今問題は、後でviewWillAppearで通知の外でstrをログに記録すると、nullが返され続けることです.通知メソッド内でstrをログに記録すると、nullが返されるだけです...後でこれを理解しようとしますが、主な問題は、NSNotificationCenter を使用して解決したと思います。