在 UIActionSheet 的专有初始化方法中 initWithTitle 中,你可以指定每个按钮的标题,也可以用 nil 标题直接取消这个按钮:
[[UIActionSheetalloc]initWithTitle:nil
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:@"储存草稿",@"删除草稿",@"取消编辑",nil];
很显然,3 个按钮的 index 将分别为:0,1,2。
在委托方法 actionSheet: clickedButtonAtIndex: 中,你可以通过第2个参数buttonIndex 很容易获取到用户点击到的按钮的标题:
NSString* btnTitle=[actionSheetbuttonTitleAtIndex:buttonIndex];
这在 iPhone 应用程序中没有什么问题。但在 iPad 应用中很容易导致程序崩溃。这是由于iPad 的 ActionSheet 实际上是用 popover 风格显示的。我们知道 popover 一般都会提供一个“隐形”的 cancelButton按钮,这个按钮存在于 popover 之外的任何地方。只要用户触摸 popover 之外的任意区域,都等同于按下了cancelButton 按钮。
这样,在 iPad 中,上面的那个 ActionSheet 的按钮实际上有 4 个,除了 index 为 0,1,2 之外的 3 个按钮外,还有一个 index 为 -1 的“隐形”的 cancelButton 按钮。
这样,当用户触摸 popover 之外的区域时,clickedButtonAtIndex: 方法会传来一个 -1 的 buttonIndex 参数。
于是 [actionSheet buttonTitleAtIndex:buttonIndex]会立即导致一个下标越界的异常,应用程序崩溃。
因此,对于 iPad 程序,我们应当小心地检测 buttonIndex 是否在正确的范围内,clickedButtonAtIndex:方法中的语句应当修改为:
if(buttonIndex>=0and buttonIndex<=3){
btnTitle=[actionSheetbuttonTitleAtIndex:buttonIndex];
}
分享到:
相关推荐
UIActionSheet demo23456789
UIActionSheet示例代码,IOS 开发总结
IOS自定义UIActionSheet的例子,供大家学习
高仿微信ActionSheet,使用和UIActionSheet基本相同,代码有不足,仅供参考。
ActionSheetPicker = UIPickerView + UIActionSheet
Android 仿iPhone UIActionSheet控件效果很好用类似qq上传头像前的选择控件
UIActionSheet经常被用来制作各种弹出的选项,这里我们就来看一下iOS中的表单按钮选项UIActionSheet常用方法整理,需要的朋友可以参考下
ios应用源码之仿uialertview和uiactionsheet的一个效果
多功能选择器UIActionSheet,仿微信ActionSheet,还有其他样式改变,满足各种需求
BlockAlertsAnd-ActionSheets, 出色的UIAlertView和UIActionSheet替换灵感由 TweetBot 它是如何启动... 如果在同一类中有两种警报,那么就很痛苦了,例如通过调用委托方法来完成所有。 我也不喜欢在按钮的事件中应该执
详细讲解UIAlertView和UIActionSheet的使用方法,以及开发中遇到的一些问题
UIActionSheet改为UIView核心代码为以下几个方法: - (void)showInView:(UIView *)view; // UIPicker显示 -(void)hidePickerView; // UIPicker隐藏 - (UIViewController *)viewController; // 通过UIView查找...
该工具是自己封装的framework 其中自定义了UIKit的UIActivity和UIActionSheet 后续的自定义UI会持续更新 注意:framework分真机和模拟器 可以通过终端将两者合二为一 适用方法 直接将文件中的framework拖入工程 记得...
简单的自定义UIActionSheet
整合了UIAlertView和UIActionSheet这两种系统风格的弹框,创建弹框再也不用兼容iOS8以前和iOS8以后了。代码也不会因为delegate而分离,直接接受Block回调。如果您觉得我的代码帮到了您,我会非常欣慰。同时如果您想...
详细介绍了UIActionSheet对象的作用,还通过实例详细的讲解了UIActionSheet的用法
封装了UIAlertView和UIActionSheet的MessageBox
一个改变UIActionSheet中按钮的例子,自己以前去试着这样做的时候,一直没成功,这个使用帮了我大忙啊~
DoActionSheet, UIActionSheet的替换 DoActionSheet替代 UIActionSheet: 基于块,可以定制主题,易于使用图像或者地图预览带有标题,带有破坏性按钮的,带有取消按钮和图像 如果按钮有许多按钮但按钮的位置是固定的...