iOS開發UI篇--一個支持圖文混排的ActionSheet

1、簡介

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,完成該需求。
項目演示以下:
1.gifapi

2、使用說明

第一步、構建數據模型

@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須要實現如下代理方法:網絡

-(void) didSelectIndex:(NSInteger)index{
}

該代理方法,主要是在Controller中可以實如今自定義ActionSheet中的點擊事件。app

3、實現原理

由於ActionSheet不能支持圖片的顯示,因此咱們就放棄使用擴展UIActionSheet控件的方法。我在本項目中使用的是UITableView+動畫,高仿ActionSheet的方法。UTableView能夠製做列表選項,動畫能夠實現系統自帶ActionSheet的自底向上和漸變效果。iview

注意點:學習

若是tableview處於uiview上面,uiview整個背景有點擊事件,可是咱們須要若是咱們點擊tableview的時候,處理tableview的點擊事件,而不是uiview的事件。在這裏,咱們須要判斷咱們點擊事件是否在uiview上仍是在uitableview上。動畫

解決方案以下:ui

一、實現代理:atom

<UIGestureRecognizerDelegate>

二、讓gesture設置爲代理spa

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也能夠用於如下場景:
3.gif

4.gif

5、下載地址

Demo下載地址:這是一個個人iOS交流羣:624212887,羣文件自行下載,無論你是小白仍是大牛熱烈歡迎進羣 ,分享面試經驗,討論技術, 你們一塊兒交流學習成長!但願幫助開發者少走彎路。——點擊:加入

若是以爲對你還有些用,就關注小編+喜歡這一篇文章。你的支持是我繼續的動力。

下篇文章預告:iOS開發UI篇--一個側滑菜單SlidingMenu

文章來源於網絡,若有侵權,請聯繫小編刪除。

相關文章
相關標籤/搜索