首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将值传回parentViewController

无法将值传回parentViewController
EN

Stack Overflow用户
提问于 2012-02-20 18:57:24
回答 5查看 6.3K关注 0票数 4

我有masterViewController和detailViewController。Masterview推送detailView。当返回到masteViewController时,我想更新foo值。但是我只能从nslog中得到NULL。在返回导航时,如何将parenteViewContrller.foo值设置为@"bar“?

masterViewController.h

代码语言:javascript
复制
    NSString *foo; 
    -(void)setFoo:(NSString *)fooValue
    @property(nonatomic, retain) NSString *foo; 

masterViewController.m

代码语言:javascript
复制
@synthesize foo;

-(void)setFoo:(NSString *)fooValue{

    NSLog(@"updated foo:%@", fooValue);
}

detailViewController.m

代码语言:javascript
复制
-(void)goBack{
    [self.navigationController.parentViewController setValue:@"bar" forKey:@"foo"];
    [self.navigationController popViewControllerAnimated:YES];
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-20 19:24:48

从iOS 5开始,[UIViewController parentViewController]将不会返回您所期望的内容,相反,您应该使用[UIViewController presentingViewController]

如果你只是针对iOS 5,开始使用presentingViewController很容易,但如果不是这样,我建议你手动传递你的UIViewController

代码语言:javascript
复制
// 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
票数 6
EN

Stack Overflow用户

发布于 2012-02-20 19:01:53

为了让setValue:ForKey:正常工作,你的视图控制器必须符合NSKeyValueCoding协议。

试试这个:

代码语言:javascript
复制
-(void)goBack{
    [self.navigationController.parentViewController setFoo:@"bar"];
    [self.navigationController popViewControllerAnimated:YES];
}

别忘了在你的setFoo:方法中适当地保留/释放。您可能还需要键入cast parentViewController以避免任何警告。

票数 0
EN

Stack Overflow用户

发布于 2012-02-20 19:25:35

将具有assign属性的母版的引用传递给detail视图。使用此引用在执行pop操作之前设置foo值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9359993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档