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
文章来源于网络,若有侵权,请联系小编删除。