IOS开发中,经常会用到UIActionSheet,但是,默认的只能添加按钮。如果能自定义的话,岂不是更好?上网搜了一下,都是只有那一种代码,通过设置几个按钮来增加UIActionSheet的高度,不是很准确。今天研究了一下,然后做了一个可以自定义高度和控件的通用UIActionSheet,拿出来共享一下。

自定义UIActionSheet的思路就是写一个继承了UIActionSheet的类,然后重写里面的layoutSubviews函数。我写的自定义的布局就是在上方有一个navgationbar的区域,里面有左右两个按钮和一个title。下方是一个自定义区域。效果如下图(这个图里,自定义区域用了一个UIDatePicker):

自定义类的类名为CustomActionSheet。头文件如下:

[cpp] view plaincopy
  1. #import <UIKit/UIKit.h>
  2. @interface CustomActionSheet : UIActionSheet
  3. @property (nonatomic, retain) UIView *customView;
  4. @property (nonatomic, retain) NSString *customTitle;
  5. -(id)initWithViewHeight:(float)_height WithSheetTitle:(NSString *)_title;
  6. @end

说明一下:customView就是可以自定义的区域,使用我这个自定义的类时,只要拿到customView,然后向其中addSubview即可,非常方便。customTitle就是上边栏的标题。这里带有一个初始化方法

[cpp] view plaincopy
  1. -(id)initWithViewHeight:(float)_height withSheetTitle:(NSString *)_title

_title赋值给customTitle,_height就是自定义UIActionSheet中自定义区域的高度,对应上边的图,就是UIDatePicker所占区域的高度,自定义区域宽为320,不需要设置.

然后是CustomActionSheet.m文件,核心的代码就是重写的layoutSubviews函数,代码如下:

[cpp] view plaincopy
  1. -(void)layoutSubviews{
  2. [super layoutSubviews];
  3. //
  4. //    CGRect newFrame = self.frame;
  5. newFrame.origin.y = 459;
  6. //    newFrame.origin.y = 459 - customViewHeight - NavBarHeight;
  7. //    self.frame = newFrame;
  8. UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, ViewHeight - customViewHeight -NavBarHeight, 320, NavBarHeight)];
  9. navBar.barStyle = UIBarStyleBlackOpaque;
  10. UINavigationItem *navItem = [[UINavigationItem alloc] initWithTitle:self.customTitle];
  11. UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithTitle:@"取消" style:UIBarButtonItemStyleBordered target:self action:@selector(docancel)];
  12. navItem.leftBarButtonItem = leftButton;
  13. UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"确定" style:UIBarButtonItemStyleDone target:self action:@selector(done)];
  14. navItem.rightBarButtonItem = rightButton;
  15. NSArray *array = [[NSArray alloc] initWithObjects:navItem, nil];
  16. [navBar setItems:array];
  17. [self.superview addSubview:navBar];
  18. [self.superview addSubview:self.customView];
  19. }

然后是点击按钮后的两个事件触发函数,代码如下:

[cpp] view plaincopy
  1. - (void) done{
  2. [self dismissWithClickedButtonIndex:0 animated:YES];
  3. [self.delegate actionSheet:self clickedButtonAtIndex:0];
  4. }
  5. - (void) docancel{
  6. [self dismissWithClickedButtonIndex:1 animated:YES];
  7. [self.delegate actionSheet:self clickedButtonAtIndex:1];
  8. }

使用自定义控件的类,需要实现UIActionSheetDelegate协议。其中的函数:

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex

做一些点击按钮后的操作。buttonIndex值为0,是点击“确定”按钮触发,1则是点击“取消”按钮后触发的。

这里我写了一个小例子,就是上面第一个图的内容,给出下载链接:

http://download.csdn.net/detail/ccf0703/4345682

IOS开发之自定义UIActionSheet相关推荐

  1. iOS开发之自定义View的一些坑

    我们做几个简单的例子哈 自定义一个View View的m文件中有代码如下: @implementation BMView- (instancetype)init {if (self = [super ...

  2. iOS开发 - 使用自定义字体

    上次有个同事问我,XXapp的字体怎么那么萌啊?我也想要搞个萌哒哒的字体!于是,就有了今天这篇blog. 首先,我们在iOS开发中,苹果给我们提供了许多的字体,当然这里我就不列举啦,都是些英文,小汤表 ...

  3. iOS开发之自定义View

    iOS sdk中的view是UIView,我们可以很方便的自定义一个View. 创建一个 Window-based Application程序,在其中添加一个Hypnosister的类,这个类选择继承 ...

  4. 【转】iOS开发6:UIActionSheet与UIAlertView

    原文: http://my.oschina.net/plumsoft/blog/42763 iOS程序中的Action Sheet就像Windows中的 "确定-取消"对话框一样, ...

  5. iOS开发之自定义键盘(数字,字母类型等随意切换)

    项目开发很多时候用系统给的键盘不是很满足自身实际需求,那就自定义一个吧: 方法其实很简单,重新定义一个view,继承UItextfield,把UI设计好的需求键盘加入新的otherKeyboardVi ...

  6. iOS开发 tabbar自定义转场动画

    1.小记 关于自定义转场动画,只要你理清他的"套路",你就可以随心所欲地自定义了. 大体思路就是:遵守对应的代理协议,然后设置对应的代理,实现代理方法,这个代理方法要返回的值就是你 ...

  7. IOS开发之自定义Button(集成三种回调模式)

    前面在做东西的时候都用到了storyboard,在今天的代码中就纯手写代码自己用封装个Button.这个Button继承于UIView类,在封装的时候用上啦OC中的三种回调模式:目标动作回调,委托回调 ...

  8. iOS开发--AVFoundation自定义相机

    首先导入一个头文件 #import <AVFoundation/AVFoundation.h> 由于后面我们需要将拍摄好的照片写入系统相册中,所以我们在这里还需要导入一个相册需要的头文件 ...

  9. IOS开发-关于自定义TabBar条

    今天在做项目的时候,突然有一个模块需要自定义TabBar条. 在平常很多做项目的时候,都没有去自定义过,大部分都是使用系统自带的.今天整理一个自定义TabBar条的步骤. 首先看下我们最终实现的效果: ...

最新文章

  1. vs2012常用快捷键
  2. ecplise 使用 git
  3. [CTO札记]Yew敏捷软件项目管理最佳实践
  4. java实现图形界面输入半径求圆面积_测试开发工程师系列之Android自动化测试Appium(Python)连载(7)安卓图形界面...
  5. USB摄像头无法正常读取问题
  6. 【计算机基础】存储器层次 Memory hierarchy
  7. 美国总统就职演说词汇分布图
  8. linux新建文件夹明率,linux新建文件和文件夹命令
  9. 二叉树题目---3 另一个树的子树 AND 二叉树最大深度
  10. node.js gbk编码_如何使用Node.js将Chrome的霸王龙编码为电报游戏
  11. MFC中的动态创建与运行时识别
  12. TraceEventsDB event(跟踪事件)总结
  13. Linux awk用法
  14. malloc和free的常识性问题
  15. 苹果手机录屏软件_4款手机录屏软件推荐,你觉得哪款更好用?
  16. 修改c盘user用户文件夹名称
  17. python中的snip用法_Python sniprd包_程序模块 - PyPI - Python中文网
  18. 基于spring boot的实验自动评分系统
  19. Longhorn 云原生容器分布式存储 - Air Gap 安装
  20. 省市区前端json格式 上

热门文章

  1. python typing typescript_将 python 数据转化为 TypeScript 格式
  2. 八十二、归并排序求取复杂的逆序数
  3. 四十八、使用Python和Stata完成广西碳酸钙企业的主成分分析和因子分析
  4. 二十三、前端必学Node.js入门
  5. 二十二、statsmodels库的使用
  6. tornado设置cookie和seesion
  7. 详解深度学习中的Normalization,不只是BN(2)
  8. 5.2 使用pytorch搭建GoogLeNet网络 笔记
  9. HDU1290 献给杭电五十周年校庆的礼物 平面分割空间问题
  10. 添加轨迹运动_时间最优轨迹(资料)