这是一个关于委托的问题,试图从链接到具有选择器视图的容器视图的子视图控制器传回一些数据。之前我问了一个相关问题,有人很友好地回复了以下代码:
"我将以一个代表如何工作的例子来解释你。
像这样编辑你的ChildViewController.h:"
@protocol ChildViewControllerDelegate;
@interface ChildViewController : UIViewController
@property (weak)id <ChildViewControllerDelegate> delegate;
@end
@protocol ChildViewControllerDelegate <NSObject >
- (void) passValue:(UIColor *) theValue;
@end
&#34;当您想要将某些内容传递回ParentViewController时,在您的ChildViewController.m上,请执行以下操作:&#34;
- (void) myMethod
{
[delegate passValue:[UIColor redColor]]; // you pass the value here
}
在您的ParentViewController.h
上#import "ChildViewController.h"
@interface ParentViewController : UIViewController <ChildViewControllerDelegate > // you adopt the protocol
{
}
在您的ParentViewController.m上:
- (void) passValue:(UIColor *) theValue
{
//here you receive the color passed from ChildViewController
}
现在要小心。只有在设置委托时,一切都会起作用。因此,当您在ParentViewController类中声明ChildViewController时,请执行以下操作:
ChildViewController * controller = [[ChildViewController alloc]initWithiNibName:@"ChildViewController"];
controller.delegate = self; //without this line the code won't work!"
无论如何,这对我有所帮助,是我所得到的最有用的建议之一。不幸的是,此代码中的一行返回错误并使委托为零。就是这个:
ChildViewController * controller = [[ChildViewController alloc]initWithiNibName:@"ChildViewController"];
错误是:&#34;没有可见的@interface用于&#39; ChildViewController&#39;声明选择器&#39; initWithNibName:&#39;
当我按照我正在努力学习的东西的指示时,我有点失落。首先,当我尝试输入它时,建议的方法采用另一个参数:[[ChildViewController alloc] initWithNibName:&lt;#(nullable NSString *)#&gt; bundle:&lt;#(nullable NSBundle *)#&gt;];
我已经完成了一个NSLog来获取[self.delegate描述]并且它返回null。有人可以帮忙吗?感谢
答案 0 :(得分:0)
听起来您的代表团建议很好,但是它没有通过故事板构建视图控制器的参数。
ChildViewController *controller = [[ChildViewController alloc]
initWithNibName:@"ChildViewController"
bundle:[NSBundle mainBundle]];
...将起作用,但前提是项目中有一个名为&#34; ChildViewController&#34;的接口构建器文件。