如何与容器视图控制器和父视图控制器通信?我试图进行沟通并在它们之间传递价值。我在绿色视图控制器中添加了一个容器视图。我已经设置了segue名称和#34; communicSegue"。我已经搜索了一些方法,我知道我们可以设置prepareForSegue来传递初始值。
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"communicateSegue"]) {
NSLog(@"call prepare for segue at parent view controller");
}
}
但是现在我想传递值并更改不同viewcontroller中的标签。不是最初的。
我不知道该怎么做?
问题:
有谁知道如何将ParentViewController传递值实现到Container View Controller并在ContainerViewController中显示标签?
反过来,容器视图控制器单击按钮然后传递值并使用objective-c更改ParentViewController中的标签显示?
感谢。
我在parentViewController.h中的声明变量: #import
@interface ParentViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *parentTF;
@property (weak, nonatomic) IBOutlet UIButton *passValToChildVCBtn;
@property (weak, nonatomic) IBOutlet UILabel *showContainerValLB;
@property (weak, nonatomic) IBOutlet IBAction *passValueToContainerEvent;
@end
在ContainerChildViewController.h中 #import
@interface ContainerChildViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *showParentValLB;
@property (weak, nonatomic) IBOutlet UITextField *childTF;
@property (weak, nonatomic) IBOutlet UIButton *passToParentBtn;
@property (weak, nonatomic) IBOutlet IBAction *passValueToParentBtnEvent;
@end
非常感谢你。
答案 0 :(得分:10)
关于将值传递给containerView控制器,您可以在ChildViewController中创建一个您想要传递的值的属性。然后在您的ParentViewController中执行以下操作:
self.ChildViewController.yourProperty = yourValue
相反可以用4种方式完成:
最简单的方法是,你可以在你的parentviewController中创建一个属性,并像以下一样访问它
((YourParentViewControllerClassType *)self.parentViewController).yourParentProperty = TheValueYouWant;
答案 1 :(得分:2)
我这样做:
Swift中的示例:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "YourIdentifier" {
// Set references
myChildViewController = segue.destinationViewController as! YourChildViewController
myChildViewController.myParentViewController = self
}
}
目标C中的示例
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"YourIdentifier"]) {
// Set references
myChildViewController = [segue destinationViewController];
myChildViewController.myParentViewController = self
}
}
我没有尝试过目标C代码,因为我没有使用它。这只是一个实现这个想法的例子。
之后,您可以将子视图控制器中父项的任何属性设置为:
myParentViewController.property = value
并在您的父视图控制器中:
myChildViewController.property = value
希望这对任何人都有帮助!
答案 2 :(得分:1)
非常简单,UIStoryboardSegue
包含使用属性-destinationViewController
对目标视图控制器的引用。
在方法-prepareForSegue
中,您可以访问它并传递您需要的数据
如果您需要将数据从子节点传递给父节点,我强烈建议您避免硬连接并使用委托或通知模式等内容。
请记住,您的父视图控制器已包含对子视图控制器的引用,您只需使用-childViewControllers
属性即可访问它。
答案 3 :(得分:1)
您可以使用NSNotificationCenter更新所有屏幕,或者您可以这样做..
在ContainerChildViewController.h
@property(nonatomic,copy)NSString * mytextString;
如果您导入ParentViewController.h
,则可以在ContainerChildViewController.h
中访问此媒体资源
你必须在ParentViewController.h
中创建一个NSString
在此,您可以设置按钮操作来复制textfielddata.text
那么您可以将此值分配给ContainerChildViewcontroller's
如
//在ParenViewController
UIStoryboard *mystoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
ContainerChildViewController * second= [mystoryboard instantiateViewControllerWithIdentifier:@"ContainerChildViewController"];
second.mytextString = self.mytextString;
// either you directly pass this value or use the string it should work both ways
NSLog(@"%@",second.orderID);
[self.navigationController pushViewController:second animated:YES];
回复是否有效
答案 4 :(得分:0)
试试这个
- (IBAction)showDetail:(UIButton *)sender {
DetailViewController *detailVc = [self.childViewControllers firstObject];
detailVc.lable.text = sender.titleLabel.text;
}