理解/阐明视图控制器语法

时间:2013-08-24 17:18:26

标签: ios cocoa-touch uiviewcontroller

我一直在看视图控制器几天(搜索xcode帮助,谷歌和堆栈溢出),我想我对它有一些了解,但不是很多。 我有一些代码,我无法理解。 所以这里我有以下代码,我在我正在阅读的书中找到,我不确定我是否理解正确。

-(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的属性,在这里使用。

1 个答案:

答案 0 :(得分:0)

很多这些问题比视图控制器的上下文更通用。

  • [super methodName]调用名为methodName的方法的超类实现。在您的情况下,Apple在UIViewController的viewWillDisappear:方法中编写了一些代码(我们无法访问)。当从超类中重写方法时,总是调用super。

  • 请注意,只要视图设置为消失,viewWillDisappear:就会触发回调。我的猜测是,此方法的超级实现将此回调转发给子视图控制器,尤其是在UINavigationControllerUITabBarController等标准容器类的情况下。

  • 类型转换似乎没有必要,如果接收者是id类型或者在{{1}中为被调用方法提供声明,则总是可以在没有编译器错误/警告的情况下调用方法}}

  • 就代表而言,协议和委托是Objective-C的主要部分,并广泛用于Apple的API。 This link可能会帮助您了解它们的工作原理;它对我帮助很大。