我有一个NavigationController内的4个viewControllers序列,每个从用户抓取一些输入的textFields存储在NSMutableDictionary中。尝试传递viewControllers之间的数据
每个VC的集合本身都是下一个VC的代表,它也会沿着NSMutDict传递。
这工作正常。
我不明白的是:
说我已经填补了VC1 5个文本框。然后我把自己定为VC2的代表,把VC2的字典和输入数据一起传给VC2。在VC2中,我填入另外4个textField并将它们添加到字典中。如果我决定需要在VC1中更改某些内容,请点击后退按钮并修改数据。但是当我再次前进时,我失去了我在VC2上输入的东西。
如何将字典传递回VC1并添加信息,以便当它传递给VC2时,它又包含所有内容?
委托人(VC1)有一种方法用VC2中的字典更新其字典。
我还通过在VC1中的prepareForSegue:方法中设置它来自定义VCB中的backBarButtonItem。
我觉得我越来越近,但...
我只能获得目标的行动通过设置在VC2发生leftBarButtonItem和使用工作,代替默认后退按钮。
在VC1(prepareForSegue :)中设置后退按钮似乎不允许设置任何目标或动作。
我知道我无法在VC2中设置后退按钮,那我该怎么办?我可以使用委托从VC2设置后退按钮的目标和操作吗?
我认为这可能与UINavigationBarDelegate有关,但我无法弄清楚在哪里放置什么。我尝试在VC2中设置它,但它没有做任何事情。
TIA。
下面是相关代码:
协议:
#import <Foundation/Foundation.h>
@protocol IAXAddNewUserDelegate <NSObject>
@required
- (void)updateNewUserDataWithData: (NSMutableDictionary *)newData;
@end
从VC1.h:
#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
从VC1.m:
#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 2012-04-10 17:31:46