NavigationController内に4つのviewControllerのシーケンスがあり、それぞれがNSMutableDictionaryに格納されているユーザーからの入力のtextFieldをいくつか取得します。viewControllers間でデータを受け渡ししようとしています
VCの各セットは、それがseguesする前にnextVCの代理人としてアップし、NSMutDictも一緒に渡します。
これは問題なく動作します。
私は理解していないことはこれです:
は、私はVC1で5つのテキストフィールドに記入していると言います。次に、私は自分自身をVC2の代理人に設定し、VC2に入力データの辞書を渡し、VC2に渡します。 VC2では、別の4つのtextFieldsを入力し、これらを辞書に追加します。 VC1で何かを変更する必要があると決めたら、戻るボタンをタップしてデータを修正します。しかし、私が再び前進するとき、私はVC2で入力したものを失う。
辞書をVC1に戻して情報を追加するにはどうすればいいですか?VC2に再度転送されると、その中にはすべてが含まれていますか?
デリゲート(VC1)には、その辞書をVC2の辞書で更新する方法があります。
また、VC2のbackBarButtonItemをVC1のprepareForSegue:メソッドで設定してカスタマイズしました。
私は唯一のターゲットアクションがVC2でleftBarButtonItemを設定し、代わりにデフォルトの[戻る]ボタンのことを利用して仕事を得ることができます
私が近づいていると思うけど...。
VC1(prepareForSegue :)に戻るボタンを設定しても、ターゲットまたはアクションを設定できないようです。
私はVC2に戻るボタンを設定できないことを知っています。どうすればいいですか?デリゲートを使用して、VC2から戻るボタンのターゲットとアクションを設定できますか?
私はUINavigationBarDelegateと何か関係があるかもしれないと思っていますが、それをどこに置くべきかはわかりません。私はVC2で設定しようとしましたが、何もしませんでした。
TIA。
プロトコル:VC1.hから
#import <Foundation/Foundation.h>
@protocol IAXAddNewUserDelegate <NSObject>
@required
- (void)updateNewUserDataWithData: (NSMutableDictionary *)newData;
@end
:VC1.mから
#import "IAXAddNewUserDelegate.h"
@interface IAXAddNewUser1 : UITableViewController <UITextFieldDelegate, UIAlertViewDelegate, IAXAddNewUserDelegate>
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (strong, nonatomic) User *selectedUser;
@property (strong, nonatomic) User *aNewUser;
@property BOOL isFirstUser;
- (void)updateNewUserDataWithData: (NSMutableDictionary *)newData;
@end
:
#pragma mark - Segues
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"AddUser2"]) {
IAXAddNewUser2 *addUser2VC = segue.destinationViewController;
addUser2VC.managedObjectContext = self.managedObjectContext;
addUser2VC.progressTotal = self.progressTotal;
addUser2VC.isFirstUser = self.isFirstUser;
addUser2VC.userData = self.userData;
addUser2VC.delegate = self;
if (self.selectedUser) {
addUser2VC.selectedUser = self.selectedUser;
}
self.title = @"Step 1";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(passDataBack:)];
self.navigationItem.backBarButtonItem = backButton;
}
}
#pragma mark - IAXAddNewUserDelegate Methods
- (void)updateNewUserDataWithData: (NSMutableDictionary *)newData
{
self.userData = newData;
NSLog(@"Updated AddUserVC1");
}
VC2.mから
はここに関連するコードです
-(void)passDataBack:(id)sender
{
NSLog(@"Sending Data Back to VC1");
[self.delegate updateNewUserDataWithData:self.userData];
[self.navigationController popViewControllerAnimated:YES];
}
私の答えは、実際には「戻る」ボタンを回避する方法を教えずに、コードを大幅に少なくしたいということをする方法を示しています。 – AMayes