2

菜鸟问题伙计们,但我无法理解。

我有一个在单独的视图控制器中加载的视图控制器。我希望能够按下按钮来调用父视图控制器内的方法。所以这就是我所拥有的

父VC:

   .h
    -(void)callParentMethod;



    .m

    -(void)viewDidLoad{
    self.childVC.parentVC = self;
    }

-(void)callParentMethod{
NSLog(@"Hello?");
}

子VC:

.h

#import "TheParentViewController.h"

@property (nonatomic, weak) TheParentViewController *parentVC;


.m

-(void)addThis{
[self.parentVC callParentMethod];
}

我没有收到任何错误,子 VC 方法addThis似乎调用了该​​方法,但从未调用过 NSLog。有什么想法我做错了吗?

4

5 回答 5

2

我认为parentVC发布是因为weak参考。尝试使用此方法。

-(void)addThis{
NSLog(@"%@", self.parentVC);
[self.parentVC callParentMethod];
}
于 2013-09-16T17:06:10.017 回答
0

我不太确定您的应用程序是什么,但您不必保留对父视图控制器的引用。UIViewController 已经有一个名为的属性parentViewController,您可以通过以下方式使用它:

[self.parentViewController methodToCall];

这将调用父视图控制器上的方法。您可能需要强制转换对象才能调用自定义方法

[(TheParentController *)self.parentViewController methodToCall];

这当然假设子视图控制器的视图是父视图控制器视图的子视图。希望这可以帮助

于 2013-09-16T17:25:19.827 回答
0
YourParentVC *parent = (YourParentVC*)[self presentingViewController];

parent.whatever = blah;
于 2013-09-16T17:04:53.480 回答
0

检查您的父视图控制器是否已分配。

   parentnvc = [ParentViewController alloc]initWithNibName:@"somenib" bundle:nil];

如果 parentvc 已分配并初始化并调用该方法

于 2013-09-16T17:47:25.327 回答
0

你可以在子视图控制器中创建一个属性说,

@class ParentVC;
@property(weak,nonatomic)ParentVC *parentVCreference;

并获取父视图控制器的参考,如下所示

self.parentVCreference=(ParentVC*)self.parentViewController;

然后您可以从 ParentVC 调用任何公开的方法,如下所示

[self.parentVCreference parentVCMethod];

注意:您需要在 ChildVC 实现文件中导入 ParentVC 的 header。

于 2015-11-24T04:59:24.813 回答