本人iOS小白,问题有点长,我分5点叙述:
1.今天在看UIActionSheet和UIAlertView,书上说它们都使用了委托,所以当我的UIViewController对象相要使用它们时,就必须遵守它们的协议,还要实现协议中规定的一些方法?
2.然后以actionSheet为例,它要遵循<UIActionSheetDelegate>协议,在使用它时,需要实现协议里面的一些方法,于是我定义了一个,在Xcode自动补全提示下,有多个方法供选,如下图:
3.但是,使用这几个方法似乎都可以让控件跑起来,难道说它们的功能都是一样的吗?只要随便实现一个协议中的方法就可以了?
4.然后我去看<UIActionSheetDelegate>协议的声明,里面有这些方法的声明,如下图:
5.这几个方法在最大的区别就在于@option关键字,最下面那个方法是有@option的,而上面那个没有,照理说@option是可选,而没有@option是必须实现,可是现在仅仅只要实现下面那个可选的协议,actionSheet就能跑了,这是为什么呢?我觉得协议委托这一块学得还不是很清楚,希望iOS前辈们能帮我一下 : )
你没完全理解“委托”的意思哈:)
首先,如楼上所说,
@optional
后面的所有方法都是可选的。也就是说,UIActionSheetDelegate
里面所有的方法都是不必须实现的。其次,就算你一个方法都不实现,actionSheet 也一样能“跑起来”,就是能正常显示出来,能正常点击。问题在于,你无法指定点击了之后干什么。
而通过实现这些委托方法,你才能指定点击按钮之后干什么。从方法名就能看出含义,比如如果用户点击了按钮,就会调用委托的
clickedButtonAtIndex
方法了,就会执行你写在这个方法里的代码;如果你没实现这个方法,它就什么都不做。