是否有必要将scrollview.delegate设置为self?

时间:2016-09-06 21:52:42

标签: ios swift cocoa

我正在参加斯坦福大学提供的在线iOS课程。在示例代码中,

@IBOutlet weak var scrollView: UIScrollView! {
    didSet {
        scrollView.contentSize = imageView.frame.size
        // all three of the next lines of code
        // are necessary to make zooming work
        scrollView.delegate = self
        scrollView.minimumZoomScale = 0.03
        scrollView.maximumZoomScale = 1.0
    }
}

但是,如果删除scrollView.delegate = self,此滚动视图仍可在模拟器上运行。

我的问题:

  1. 是否有必要将scrollview.delegate设置为self?为什么或为什么不呢?
  2. 自我指的是什么?命令+左键单击定位"确实设置了#34;。

3 个答案:

答案 0 :(得分:3)

  1. 您无需为scrollView设置委托。只有在想要scrollView调用的委托方法时才会这样做。例如,如果要在用户执行滚动时执行某些操作,则需要设置委托并实现func scrollViewDidScroll(scrollView: UIScrollView)方法。每次用户滚动时,您都可以对此方法的身体做出反应。

  2. Self是指包含此变量的类。在这种情况下,它可能是您的UIViewController

答案 1 :(得分:3)

定义,它仍然有效吗?我的意思是,如果你可以用触摸移动它,是的,它会起作用。

原因

scrollView.delegate = self

是它允许你添加可以在滚动开始时执行的代码,滚动结束等。这样你就有了自定义点来改变scrollview的行为或动作。没有那么小的代码,委托代码永远不会被调用。

有道理吗?

答案 2 :(得分:1)

  

自我指的是什么?

self是执行引用self的代码的对象。代码段中定义的scrollview实例变量是某个类的一部分;在这种情况下,它肯定是一个视图控制器。对象和类之间的区别就像是桃子馅饼和桃子馅饼的配方之间的区别:配方是一个告诉你所有关于桃馅饼的规格,但你不能吃配方,而实际的桃子馅饼是一个独特的东西,你可以从一个食谱制作几个相似的馅饼。无论如何,self是执行与didSet变量关联的scrollview方法的特定对象的名称。

  

是否有必要将scrollview.delegate设置为self?为什么或为什么不呢?

UIScrollView对象具有delegate属性,您可以将其设置为知道如何成为滚动视图委托的任何对象,即实现UIScrollViewDelegate的任何对象协议。但是由于视图几乎总是由某种视图控制器管理,因此管理滚动视图的视图控制器也充当它的委托是很典型的。滚动视图可以正常工作,完全没有代理;设置委托只有在你想要做一些事情以响应滚动视图中的变化或者以某种方式修改其行为时才是重要的。因此,如果滚动视图具有委托,则它通常是管理该滚动视图的视图控制器,并且因为它可能也是视图控制器,其首先设置滚动视图{{1 (意味着视图控制器)是您在大多数时间看到的。