我有一個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