我有masterViewController和detailViewController。Masterview推送detailView。当返回到masteViewController时,我想更新foo值。但是我只能从nslog中得到NULL。在返回导航时,如何将parenteViewContrller.foo值设置为@"bar“?
masterViewController.h
NSString *foo;
-(void)setFoo:(NSString *)fooValue
@property(nonatomic, retain) NSString *foo; masterViewController.m
@synthesize foo;
-(void)setFoo:(NSString *)fooValue{
NSLog(@"updated foo:%@", fooValue);
}detailViewController.m
-(void)goBack{
[self.navigationController.parentViewController setValue:@"bar" forKey:@"foo"];
[self.navigationController popViewControllerAnimated:YES];
}发布于 2012-02-20 19:24:48
从iOS 5开始,[UIViewController parentViewController]将不会返回您所期望的内容,相反,您应该使用[UIViewController presentingViewController]
如果你只是针对iOS 5,开始使用presentingViewController很容易,但如果不是这样,我建议你手动传递你的UIViewController:
// DetailViewController.h
@class MasterViewController;
@interface DetailViewController : UIViewController
@property (assign, nonatomic) MasterViewController *masterViewController;
@end
// DetailViewController.m
#import "DetailViewController.h"
#import "MasterViewController.h"
@implementation DetailViewController
- (void)goBack {
[self.masterViewController setFoo:@"bar"];
// dismiss this view controller
}
@end
// MasterViewController.h
@interface MasterViewController : UIViewController
- (void)setFoo:(NSString *)bar;
@end
// MasterViewController.m
#import "MasterViewController.h"
#import "DetailViewController.h"
@implementation MasterViewController
- (void)goForward {
DetailViewController *detailViewController = ...;
[detailViewController setMasterViewController:self];
// present this view controller
}
@end发布于 2012-02-20 19:01:53
为了让setValue:ForKey:正常工作,你的视图控制器必须符合NSKeyValueCoding协议。
试试这个:
-(void)goBack{
[self.navigationController.parentViewController setFoo:@"bar"];
[self.navigationController popViewControllerAnimated:YES];
}别忘了在你的setFoo:方法中适当地保留/释放。您可能还需要键入cast parentViewController以避免任何警告。
发布于 2012-02-20 19:25:35
将具有assign属性的母版的引用传递给detail视图。使用此引用在执行pop操作之前设置foo值。
https://stackoverflow.com/questions/9359993
复制相似问题