IOS开发之自定义UIActionSheet

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

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



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

[cpp]  view plain copy
  1. #import   
  2.   
  3. @interface CustomActionSheet : UIActionSheet  
  4.   
  5. @property (nonatomic, retain) UIView *customView;  
  6. @property (nonatomic, retain) NSString *customTitle;  
  7.   
  8. -(id)initWithViewHeight:(float)_height WithSheetTitle:(NSString *)_title;  
  9.   
  10. @end  

说明一下:customView就是可以自定义的区域,使用我这个自定义的类时,只要拿到customView,然后向其中addSubview即可,非常方便。customTitle就是上边栏的标题。这里带有一个初始化方法
[cpp]  view plain copy
  1. -(id)initWithViewHeight:(float)_height withSheetTitle:(NSString *)_title  
_title赋值给customTitle,_height就是自定义UIActionSheet中自定义区域的高度,对应上边的图,就是UIDatePicker所占区域的高度,自定义区域宽为320,不需要设置.

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

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

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

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

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

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

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

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


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

你可能感兴趣的:(IOS开发之自定义UIActionSheet)