我在情节提要中创建了两个 uiviewcontroller。当按下按钮时,我将第二个 UIview 作为子视图添加到第一个视图。
现在,我的子视图有一个完成和取消按钮,一旦被触摸,子视图必须从主视图中删除,并且需要将一些数据发送回主视图。使用代表是解决这个问题的唯一方法吗?请解释是否有其他更简单或更好的选择。
谢谢 :)
我在情节提要中创建了两个 uiviewcontroller。当按下按钮时,我将第二个 UIview 作为子视图添加到第一个视图。
现在,我的子视图有一个完成和取消按钮,一旦被触摸,子视图必须从主视图中删除,并且需要将一些数据发送回主视图。使用代表是解决这个问题的唯一方法吗?请解释是否有其他更简单或更好的选择。
谢谢 :)
听起来问题只是关于第一个视图控制器视图的子视图。在这种情况下,第一个视图控制器可以直接检查所有这些。即说您希望在视图之间“传递”的数据是子视图中包含的 UITextField 的文本。
您有子视图的出口,可能是在 IB 中绘制的?
// MyViewController.m
@property(weak, nonatomic) IBOutlet UIView *subview; // self.view is it's parent
创建一个连接到您想要从中获取数据的任何子视图的插座:
@property(weak, nonatomic) IBOutlet UITextField *textField; // probably, subview is it's parent
隐藏和显示“对话框”:
self.subview.alpha = 0.0; // to hide (alpha is better than 'hidden' because it's animatable
self.subview.alpha = 1.0; // to show
按下按钮时:
- (IBAction)pressedDoneButton:(id)sender {
self.subview.alpha = 0.0;
// or, prettier:
[UIView animateWithDuration:0.3 animations:^{ self.subview.alpha = 0.0; }];
// the text field still exists, it's just invisible because it's parent is invisible
NSLog(@"user pressed done and the text that she entered is %@", self.textField.text);
}
关键是数据没有在视图之间传递。视图控制器具有指向视图的指针。有些像按钮会为视图控制器生成事件以做出反应。其他人携带视图控制器可以看到的数据。