这几天我一直在看视图控制器(搜索 xcode 帮助、google 和堆栈溢出),我想我对它有一些了解,但不是很多。我有一些代码,我很难理解。所以在这里我有我在我正在阅读的书中找到的以下代码,我不确定我是否理解正确。
-(void)prepareForSegue(UIStoryboardsegue *)segue sender:(id)sender{
((ViewController2 *)segue.destinationViewController).delegate = self;
}
首先,我不知道为什么我们在这里将类型转换为我们的第二个视图控制器(viewController2)。我想我得到了剩下的,我们获取方法的 segue 参数(它包含有关 segue 中涉及的视图控制器的信息),并且我们访问destinationViewController(意味着我们想要访问我们将要访问的视图控制器)。然后我们将目标视图控制器的委托属性设置为 self。我相信我们将委托属性设置为 self,因为我们想将消息发送到我们将要访问的视图控制器中的委托。
这是我没有得到的最后一个:
在头文件中:
@property (weak, nonatomic)id delegate;
在实现文件中:(controllerVisisble 属性是一个布尔值,当用户点击一个按钮执行手动 segue 到第二个视图控制器,也就是这个时,该属性变为 YES)
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
((ViewController *)self.delegate).controllerrVisisble=NO;
}
这是我认为这样做的:viewWillDisappear 方法在视图关闭/删除时被调用。
我不太确定[super viewWillDisappear:animated],但我猜它会在视图消失时给出动画?但是,我删除了那条线,当视图控制器被解除时,我的dismissViewControllerAnimated方法仍然给出动画.
这是真正让我感到困惑的部分。我们需要以某种方式访问第一个视图控制器的 dateChooserVisible 属性,将其设置为 NO,这样我们就可以通过我们的按钮再次访问第二个视图控制器。但是,我不明白为什么我们必须进行类型转换(viewController *),然后输入 self.delegate。我也不明白为什么我们在头文件中创建了一个名为 delegate 的属性,以便在这里使用。