添加,删除子视图并在子视图和主uiviewcontroller之间进行通信

时间:2013-07-27 01:40:09

标签: objective-c uiview uiviewcontroller uibarbuttonitem addsubview

我在故事板中创建了两个uiviewcontrollers。当按下按钮时,我将第二个UIview作为子视图添加到第一个视图。

现在,我的子视图有一个完成和取消按钮,触摸后,子视图必须从主视图中删除,并需要将一些数据发送回主视图。使用委托是解决这个问题的唯一方法吗?请解释是否有其他更简单或更好的选择。

谢谢:)

1 个答案:

答案 0 :(得分:1)

听起来这个问题只是关于第一个视图控制器视图的子视图。在这种情况下,第一视图控制器可以直接检查所有这些。即假设您希望在视图之间“传递”的数据是子视图中包含的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);
}

关键是数据不在视图之间传递。视图控制器具有指向视图的指针。有些像按钮一样为视图控制器生成事件以作出反应。其他人携带视图控制器可以看到的数据。