[PR]
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
戻り先のビューへメッセージを送る
では、その逆にpopViewControllerで戻る側にデータを渡したい場合はどうでしょう。代表クラスに全部データを持たせておき、そちらを通じてやりとりする手もあります。渡したいデータは代表クラスに渡しておき、戻り先のViewControllerにあるViewWillAppearで代表クラスへデータを取りにいくようにさせれば、更新内容を反映させる事はできます。でも、プログラムが終了したら破棄するようなデータなどにもいちいち代表クラスを橋渡しに使う必要はあるのかと思う事も多々あります。かといって今表に見えているViewControllerまでの道のりが常に同じとは限らないこともあります。同じような値の設定をする場合には再利用した方が効率が良いだろうと、設定用のViewControllerが数種類の呼び出し元を持つ事もあります。では、そんな場合で直接データを渡したい時はどうするかですが、まずは以下のコードを見てください。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[myTableView deselectRowAtIndexPath:indexPath animated:YES];
NSArray *naviArray = [self.navigationController viewControllers];
NSInteger nowIndex = [naviArray count];
id aViewController = [naviArray objectAtIndex:nowIndex-2];
if([aViewController isKindOfClass:[FTPUploadViewController class]]) {
FTPUploadViewController *controller = (FTPUploadViewController *)[naviArray
objectAtIndex:nowIndex-2];
NSString *aString = [[listContent objectAtIndex:indexPath.row]
objectForKey:@"url"];
[controller setDirectoryTextFieldText:aString];
aString = [[listContent objectAtIndex:indexPath.row]
objectForKey:@"username"];
[controller setUsernameTextFieldText:aString];
} else if([aViewController isKindOfClass:[FTPDownloadViewController class]]){
FTPDownloadViewController *controller = (FTPDownloadViewController *)
[naviArray objectAtIndex:nowIndex-2];
NSString *aString = [[listContent objectAtIndex:indexPath.row]
objectForKey:@"url"];
[controller setDirectoryTextFieldText:aString];
aString = [[listContent objectAtIndex:indexPath.row]
objectForKey:@"username"];
[controller setUsernameTextFieldText:aString];
}
[self.navigationController popViewControllerAnimated:YES];
}