UIActionSheet是IOS提供給咱們開發者的底部彈出菜單控件,通常用於菜單選擇、操做確認、刪除確認等功能。 IOS官方提供的如下方式對UIActionView進行實例化:面試
- (instancetype)initWithTitle:(NSString *)title delegate:(id<UIActionSheetDelegate>)delegate cancelButtonTitle:(NSString *)cancelButtonTitle destructiveButtonTitle:(NSString *)destructiveButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ... );
從這個api咱們能夠看出,咱們只能設置文本標題,包括destructiveButtonTitle、cancelButtonTitle和otherButtonTitles,官方提供的該控件並不支持圖文混排。但有的時候,交互提給咱們的需求又須要咱們的ActionSheet具備圖文混排的效果,那就須要咱們本身仿造系統自帶的ActionSheet,完成該需求。 項目演示以下: api
Demo下載地址:這是一個個人iOS交流圈:624212887,羣文件自行下載,無論你是小白仍是大牛熱烈歡迎進羣 ,分享面試經驗,討論技術, 你們一塊兒交流學習成長!但願幫助開發者少走彎路。——點擊:加入網絡
@interface Item : NSObject @property (nonatomic , strong) NSString *icon;//圖片地址 @property (nonatomic , strong) NSString *title;//標題 @end
Item *item1 = [[Item alloc] init]; item1.icon = @"journey_phone"; item1.title = @"15195905888"; Item *item2 = [[Item alloc] init]; item2.icon = @"journey_phone"; item2.title = @"15195905777"; Item *item3 = [[Item alloc] init]; item3.icon = @"journey_phone"; item3.title = @"15195905777"; NSArray *listData = [NSArray arrayWithObjects:item1,item2,item3, nil];
PicAndTextActionSheet *sheet = [[PicAndTextActionSheet alloc] initWithList:listData title:@"撥打電話"]; sheet.delegate = self;//該控件使用的代理模式 [sheet showInView:self];
由於該控件使用了代理模式,因此在當前Controller須要實現如下代理方法:app
-(void) didSelectIndex:(NSInteger)index{ }
該代理方法,主要是在Controller中可以實如今自定義ActionSheet中的點擊事件。iview
由於ActionSheet不能支持圖片的顯示,因此咱們就放棄使用擴展UIActionSheet控件的方法。我在本項目中使用的是UITableView+動畫,高仿ActionSheet的方法。UTableView能夠製做列表選項,動畫能夠實現系統自帶ActionSheet的自底向上和漸變效果。學習
注意點:
動畫
若是tableview處於uiview上面,uiview整個背景有點擊事件,可是咱們須要若是咱們點擊tableview的時候,處理tableview的點擊事件,而不是uiview的事件。在這裏,咱們須要判斷咱們點擊事件是否在uiview上仍是在uitableview上。ui
解決方案以下:atom
一、實現代理:代理
<UIGestureRecognizerDelegate>
二、讓gesture設置爲代理
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tappedCancel)]; tapGesture.delegate = self;
三、實現代理方法,判斷點擊的是不是uiview仍是tableview
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ if([touch.view isKindOfClass:[self class]]){ return YES; } return NO; }
#4、總結
任何一個複雜控件,基本上都是有基礎控件組合實現而成。該擴展的ActionSheet也能夠用於如下場景:
Demo下載地址:這是一個個人iOS交流圈:624212887,羣文件自行下載,無論你是小白仍是大牛熱烈歡迎進羣 ,分享面試經驗,討論技術, 你們一塊兒交流學習成長!但願幫助開發者少走彎路。——點擊:加入
若是以爲對你還有些用,就關注小編+喜歡這一篇文章。你的支持是我繼續的動力。
下篇文章預告:iOS開發UI篇--一個側滑菜單SlidingMenu
文章來源於網絡,若有侵權,請聯繫小編刪除。