iOS Container View 和 Parent ViewController 通信?
iOS Container View and Parent ViewController communication?
如何与容器视图控制器和父视图控制器通信?我试图进行交流并在它们之间传递价值。我在绿色视图控制器中添加了一个容器视图。我用 "communicateSegue" 设置了 segue 名称。我搜索了一些方法,我知道我们可以设置 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 中显示标签?
反之,Container View Controller 单击按钮然后传递值并更改显示在 ParentViewController 中的标签 objective-c?
谢谢。
我在 parentViewController.h 中声明变量:
#导入
@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
#导入
@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
非常感谢。
关于将值传递给 containerView 控制器,您可以在 ChildViewController 中创建一个 属性 您希望传递的值。然后在您的 ParentViewController 中执行如下操作:
self.ChildViewController.yourProperty = yourValue
反面可以通过 4 种方式完成:
- 您可以创建一个委托协议来在您的控制器之间传递数据。
- 您可以 post 在您的 ChildViewController 中发送通知,并将父控制器添加为观察者。
- 您可以使用 KVO。
最简单的方法是,您可以在您的 parentviewController 中创建一个 属性 并像下面这样访问它
((YourParentViewControllerClassType *)self.parentViewController).yourParentProperty = TheValueYouWant;
非常简单,UIStoryboardSegue
使用 属性 -destinationViewController
.
包含对目标视图控制器的引用
在方法 -prepareForSegue
中,您可以访问它并传递您需要的数据。
如果您需要将数据从子级传递给父级,我强烈建议您避免硬耦合并使用诸如委托或通知模式之类的东西。
请记住,您的父视图控制器已经包含对您的子视图控制器的引用,您只需使用 -childViewControllers
属性.
即可访问它
您可以使用 NSNotificationCenter 来更新所有屏幕,或者您可以这样做..
在 ContainerChildViewController.h
中创建一个 属性
@property(nonatomic,copy)NSString * mytextString;
如果您导入 ContainerChildViewController.h
,此 属性 将可以在您的 ParentViewController.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];
回复如果有效
试试这个
- (IBAction)showDetail:(UIButton *)sender {
DetailViewController *detailVc = [self.childViewControllers firstObject];
detailVc.lable.text = sender.titleLabel.text;
}
我是这样做的:
- 将 containerView 的 segue 标识符设置为 viewController
- 在父视图控制器中创建 property/variable myChildViewController 并在子视图控制器中创建 property/variable myParentViewController
- 在您的 prepareForSegue 方法中将此属性设置为对正确对象的引用
- 现在您可以通过此引用访问 parent/child 视图控制器的属性。
Swift中的示例:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "YourIdentifier" {
// Set references
myChildViewController = segue.destinationViewController as! YourChildViewController
myChildViewController.myParentViewController = self
}
}
Objective C
中的示例
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"YourIdentifier"]) {
// Set references
myChildViewController = [segue destinationViewController];
myChildViewController.myParentViewController = self
}
}
我没有尝试 objective C 代码,因为我从未使用过它。这只是一个例子来理解这个想法。
之后,您可以将子视图控制器中的任何 属性 父项设置为:
myParentViewController.property = value
并在您的父视图控制器中:
myChildViewController.property = value
希望这对任何人都有帮助!
如何与容器视图控制器和父视图控制器通信?我试图进行交流并在它们之间传递价值。我在绿色视图控制器中添加了一个容器视图。我用 "communicateSegue" 设置了 segue 名称。我搜索了一些方法,我知道我们可以设置 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 中显示标签?
反之,Container View Controller 单击按钮然后传递值并更改显示在 ParentViewController 中的标签 objective-c?
谢谢。
我在 parentViewController.h 中声明变量: #导入
@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 #导入
@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
非常感谢。
关于将值传递给 containerView 控制器,您可以在 ChildViewController 中创建一个 属性 您希望传递的值。然后在您的 ParentViewController 中执行如下操作:
self.ChildViewController.yourProperty = yourValue
反面可以通过 4 种方式完成:
- 您可以创建一个委托协议来在您的控制器之间传递数据。
- 您可以 post 在您的 ChildViewController 中发送通知,并将父控制器添加为观察者。
- 您可以使用 KVO。
最简单的方法是,您可以在您的 parentviewController 中创建一个 属性 并像下面这样访问它
((YourParentViewControllerClassType *)self.parentViewController).yourParentProperty = TheValueYouWant;
非常简单,UIStoryboardSegue
使用 属性 -destinationViewController
.
包含对目标视图控制器的引用
在方法 -prepareForSegue
中,您可以访问它并传递您需要的数据。
如果您需要将数据从子级传递给父级,我强烈建议您避免硬耦合并使用诸如委托或通知模式之类的东西。
请记住,您的父视图控制器已经包含对您的子视图控制器的引用,您只需使用 -childViewControllers
属性.
您可以使用 NSNotificationCenter 来更新所有屏幕,或者您可以这样做..
在 ContainerChildViewController.h
@property(nonatomic,copy)NSString * mytextString;
如果您导入 ContainerChildViewController.h
,此 属性 将可以在您的 ParentViewController.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];
回复如果有效
试试这个
- (IBAction)showDetail:(UIButton *)sender {
DetailViewController *detailVc = [self.childViewControllers firstObject];
detailVc.lable.text = sender.titleLabel.text;
}
我是这样做的:
- 将 containerView 的 segue 标识符设置为 viewController
- 在父视图控制器中创建 property/variable myChildViewController 并在子视图控制器中创建 property/variable myParentViewController
- 在您的 prepareForSegue 方法中将此属性设置为对正确对象的引用
- 现在您可以通过此引用访问 parent/child 视图控制器的属性。
Swift中的示例:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "YourIdentifier" {
// Set references
myChildViewController = segue.destinationViewController as! YourChildViewController
myChildViewController.myParentViewController = self
}
}
Objective C
中的示例-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"YourIdentifier"]) {
// Set references
myChildViewController = [segue destinationViewController];
myChildViewController.myParentViewController = self
}
}
我没有尝试 objective C 代码,因为我从未使用过它。这只是一个例子来理解这个想法。
之后,您可以将子视图控制器中的任何 属性 父项设置为:
myParentViewController.property = value
并在您的父视图控制器中:
myChildViewController.property = value
希望这对任何人都有帮助!