关于UIActionSheet和UIAlertView的协议的委托

本人iOS小白,问题有点长,我分5点叙述:

1.今天在看UIActionSheet和UIAlertView,书上说它们都使用了委托,所以当我的UIViewController对象相要使用它们时,就必须遵守它们的协议,还要实现协议中规定的一些方法?
2.然后以actionSheet为例,它要遵循<UIActionSheetDelegate>协议,在使用它时,需要实现协议里面的一些方法,于是我定义了一个,在Xcode自动补全提示下,有多个方法供选,如下图:

图片描述

3.但是,使用这几个方法似乎都可以让控件跑起来,难道说它们的功能都是一样的吗?只要随便实现一个协议中的方法就可以了?

4.然后我去看<UIActionSheetDelegate>协议的声明,里面有这些方法的声明,如下图:

图片描述

5.这几个方法在最大的区别就在于@option关键字,最下面那个方法是有@option的,而上面那个没有,照理说@option是可选,而没有@option是必须实现,可是现在仅仅只要实现下面那个可选的协议,actionSheet就能跑了,这是为什么呢?我觉得协议委托这一块学得还不是很清楚,希望iOS前辈们能帮我一下 : )

阅读 2.9k
2 个回答

你没完全理解“委托”的意思哈:)

首先,如楼上所说, @optional 后面的所有方法都是可选的。也就是说, UIActionSheetDelegate 里面所有的方法都是不必须实现的。

其次,就算你一个方法都不实现,actionSheet 也一样能“跑起来”,就是能正常显示出来,能正常点击。问题在于,你无法指定点击了之后干什么。

而通过实现这些委托方法,你才能指定点击按钮之后干什么。从方法名就能看出含义,比如如果用户点击了按钮,就会调用委托的 clickedButtonAtIndex 方法了,就会执行你写在这个方法里的代码;如果你没实现这个方法,它就什么都不做。

1.如果遵循了某协议,就需要实现其协议内required的方法,optional方法不强制要求实现。

2.@optional 下面的那6个方法,都是optional的,也就是全都是选择实现的。不是每个方法前都要写关键字的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏