生活随笔
收集整理的這篇文章主要介紹了
IOS开发之自定义UIActionSheet
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
IOS開發中,經常會用到UIActionSheet,但是,默認的只能添加按鈕。如果能自定義的話,豈不是更好?上網搜了一下,都是只有那一種代碼,通過設置幾個按鈕來增加UIActionSheet的高度,不是很準確。今天研究了一下,然后做了一個可以自定義高度和控件的通用UIActionSheet,拿出來共享一下。
自定義UIActionSheet的思路就是寫一個繼承了UIActionSheet的類,然后重寫里面的layoutSubviews函數。我寫的自定義的布局就是在上方有一個navgationbar的區域,里面有左右兩個按鈕和一個title。下方是一個自定義區域。效果如下圖(這個圖里,自定義區域用了一個UIDatePicker):
自定義類的類名為CustomActionSheet。頭文件如下:
[cpp]?view plaincopy
#import?<UIKit/UIKit.h>?? ?? @interface?CustomActionSheet?:?UIActionSheet?? ?? @property?(nonatomic,?retain)?UIView?*customView;?? @property?(nonatomic,?retain)?NSString?*customTitle;?? ?? -(id)initWithViewHeight:(float)_height?WithSheetTitle:(NSString?*)_title;?? ?? @end??
說明一下:customView就是可以自定義的區域,使用我這個自定義的類時,只要拿到customView,然后向其中addSubview即可,非常方便。customTitle就是上邊欄的標題。這里帶有一個初始化方法
[cpp]?view plaincopy
-(id)initWithViewHeight:(float)_height?withSheetTitle:(NSString?*)_title??
_title賦值給customTitle,_height就是自定義UIActionSheet中自定義區域的高度,對應上邊的圖,就是UIDatePicker所占區域的高度,自定義區域寬為320,不需要設置.
然后是CustomActionSheet.m文件,核心的代碼就是重寫的layoutSubviews函數,代碼如下:
[cpp]?view plaincopy
-(void)layoutSubviews{?? ????[super?layoutSubviews];?? ?????? ?????? ?? ?? ?? ?? ?????? ????UINavigationBar?*navBar?=?[[UINavigationBar?alloc]?initWithFrame:CGRectMake(0,?ViewHeight?-?customViewHeight?-NavBarHeight,?320,?NavBarHeight)];?? ????navBar.barStyle?=?UIBarStyleBlackOpaque;?? ????UINavigationItem?*navItem?=?[[UINavigationItem?alloc]?initWithTitle:self.customTitle];?? ????UIBarButtonItem?*leftButton?=?[[UIBarButtonItem?alloc]?initWithTitle:@"取消"?style:UIBarButtonItemStyleBordered?target:self?action:@selector(docancel)];?? ????navItem.leftBarButtonItem?=?leftButton;?? ????UIBarButtonItem?*rightButton?=?[[UIBarButtonItem?alloc]?initWithTitle:@"確定"?style:UIBarButtonItemStyleDone?target:self?action:@selector(done)];?? ????navItem.rightBarButtonItem?=?rightButton;?? ????NSArray?*array?=?[[NSArray?alloc]?initWithObjects:navItem,?nil];?? ????[navBar?setItems:array];?? ?????? ????[self.superview?addSubview:navBar];?? ?????? ????[self.superview?addSubview:self.customView];?? ?????? }??
然后是點擊按鈕后的兩個事件觸發函數,代碼如下:
[cpp]?view plaincopy
-?(void)?done{?? ????[self?dismissWithClickedButtonIndex:0?animated:YES];?? ????[self.delegate?actionSheet:self?clickedButtonAtIndex:0];?? }?? ?? -?(void)?docancel{?? ????[self?dismissWithClickedButtonIndex:1?animated:YES];?? ????[self.delegate?actionSheet:self?clickedButtonAtIndex:1];?? }??
使用自定義控件的類,需要實現UIActionSheetDelegate協議。其中的函數:
-(void)actionSheet:(UIActionSheet?*)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
做一些點擊按鈕后的操作。buttonIndex值為0,是點擊“確定”按鈕觸發,1則是點擊“取消”按鈕后觸發的。
這里我寫了一個小例子,就是上面第一個圖的內容,給出下載鏈接:
http://download.csdn.net/detail/ccf0703/4345682
總結
以上是生活随笔為你收集整理的IOS开发之自定义UIActionSheet的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。