日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IOS开发之自定义UIActionSheet

發布時間:2024/9/30 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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];??
  • ??????
  • ????//??
  • //????CGRect?newFrame?=?self.frame;??
  • ????newFrame.origin.y?=?459;??
  • //????newFrame.origin.y?=?459?-?customViewHeight?-?NavBarHeight;??
  • //????self.frame?=?newFrame;??
  • ??????
  • ????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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。