// 以前的做法
// 1.ViewController代码如下:自定义三个左滑项
- (NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath
{NSString *titleContent = @"        ";// 去电UITableViewRowAction *callAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:titleContent handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {self.tableView.editing = NO;[self callButtonTapped:@""];}];// 讯息UITableViewRowAction *messageAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:titleContent handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {self.tableView.editing = NO;[self messageButtonTapped];}];// SMS短讯UITableViewRowAction *smsAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"              " handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {self.tableView.editing = NO;[self smsButtonTapped:@""];}];return @[smsAction, messageAction, callAction];
}- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{return YES;
}- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{// 进入编辑模式,适配iOS8
}- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{return UITableViewCellEditingStyleDelete;
}// 2.实现自定义左滑项的UI,主要是在Cell里面完成
- (void)layoutSubviews
{[super layoutSubviews];// 去掉隐式动画[CATransaction begin];[CATransaction setDisableActions:YES];[self setupSlideBtn];[CATransaction commit];
}// 设置左滑菜单按钮的样式
- (void)setupSlideBtn
{for (UIView *subView in self.subviews) {if([subView isKindOfClass:NSClassFromString(@"UITableViewCellDeleteConfirmationView")]) {// SMS短讯UIView *smsContentView = subView.subviews[0];smsContentView.backgroundColor = ICAN_SLIDE_BTN_COLOR;for (UIView *smsView in smsContentView.subviews) {[smsView removeAllSubviews];UIImageView *smsImage = [[UIImageView alloc] init];smsImage.contentMode = UIViewContentModeScaleAspectFit;smsImage.image = [UIImage imageNamed:@"sms_selected"];CGFloat width = smsView.frame.size.width;smsImage.frame = CGRectMake((width - 25) / 2, -15, 25, 25);[smsView addSubview:smsImage];// 文字UILabel *sms = [UILabel labelWithFrame:CGRectMake((width - 60) / 2, smsImage.bottom, 60, 20) text:@"SMS短讯" textColor:ICAN_BLUE_THEME_COLOR font:ICAN_FONT(14)];sms.textAlignment = NSTextAlignmentCenter;[smsView addSubview:sms];}// 讯息UIView *messageContentView = subView.subviews[1];messageContentView.backgroundColor = ICAN_SLIDE_BTN_COLOR;for (UIView *messageView in messageContentView.subviews) {[messageView removeAllSubviews];UIImageView *messageImage = [[UIImageView alloc] init];messageImage.contentMode = UIViewContentModeScaleAspectFit;messageImage.image = [UIImage imageNamed:@"message_selected"];CGFloat width = messageView.frame.size.width;messageImage.frame = CGRectMake((width - 25) / 2, -15, 25, 25);[messageView addSubview:messageImage];// 文字UILabel *message = [UILabel labelWithFrame:CGRectMake((width - 35) / 2, messageImage.bottom, 35, 20) text:@"讯息" textColor:ICAN_BLUE_THEME_COLOR font:ICAN_FONT(14)];message.textAlignment = NSTextAlignmentCenter;[messageView addSubview:message];}// 去电UIView *callContentView = subView.subviews[2];//改背景颜色callContentView.backgroundColor = ICAN_SLIDE_BTN_COLOR;for (UIView *callView in callContentView.subviews) {[callView removeAllSubviews];UIImageView *callImage = [[UIImageView alloc] init];callImage.contentMode = UIViewContentModeScaleAspectFit;callImage.image = [UIImage imageNamed:@"phone_selected"];CGFloat width = callView.frame.size.width;callImage.frame = CGRectMake((width - 25) / 2, -15, 25, 25);[callView addSubview:callImage];// 文字UILabel *call = [UILabel labelWithFrame:CGRectMake((width - 35) / 2, callImage.bottom, 35, 20) text:@"去电" textColor:ICAN_BLUE_THEME_COLOR font:ICAN_FONT(14)];call.textAlignment = NSTextAlignmentCenter;[callView addSubview:call];}}}

效果图如下:

分割线========================================================================

以上方法是在iOS11以下有效,因为iOS11后UITableViewCell的层次结构发生了变化,它的子View中并不包含UITableViewCellDeleteConfirmationView这个控件了,所以要想实现替换左滑菜单的背景图片这种变态需求就需要另找办法了,解决方法如下:

// 这种方法是重写willTransitionToState这个方法,而不是重写layoutSubviews方法,因为在左滑菜单收起来的时候,背景图片会有闪一下的bug
- (void)willTransitionToState:(UITableViewCellStateMask)state
{dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.001 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{[self setupSlideBtn];});
}// 设置左滑菜单按钮的样式
- (void)setupSlideBtn
{// 判断系统是否是iOS11及以上版本if (SYSTEM_VERSION_GREATER_THAN(@"11")) {for (UIView *subView in self.superview.subviews) {if (![NSStringFromClass([subView class]) isEqualToString:@"UISwipeActionPullView"]) {continue;}for (UIView *buttonViews in subView.subviews) {if (![NSStringFromClass([buttonViews class]) isEqualToString:@"UISwipeActionStandardButton"]) {continue;}// 修改备注UIView *remarkContentView = subView.subviews[0];[self setupRowActionView:remarkContentView imageName:@"left_slide_modify_note2"];// 删除UIView *deleteContentView = subView.subviews[1];[self setupRowActionView:deleteContentView imageName:@"left_slide_delete_button2"];}}} else {// iOS11以下做法for (UIView *subView in self.subviews) {if(![subView isKindOfClass:NSClassFromString(@"UITableViewCellDeleteConfirmationView")]) {continue;}// 删除UIView *deleteContentView = subView.subviews[0];[self setupRowActionView:deleteContentView imageName:@"left_slide_delete_button2"];// 修改备注UIView *remarkContentView = subView.subviews[1];[self setupRowActionView:remarkContentView imageName:@"left_slide_modify_note2"];}}
}// 设置背景图片
- (void)setupRowActionView:(UIView *)rowActionView imageName:(NSString *)imageName
{rowActionView.backgroundColor = kViewBackgroundColor;UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]];[rowActionView insertSubview:imageView atIndex:0];[imageView makeConstraints:^(MASConstraintMaker *make) {make.left.top.bottom.equalTo(rowActionView);make.width.equalTo(80);}];
}

iOS10效果如下:

iOS11效果如下:

iOS10、11自定义左滑菜单项背景图片相关推荐

  1. 关于Menu的根菜单项背景图片

    下面是我在类里写的菜单(这个菜单是用到自己写的母版页里面,菜单项都已经出来了,只缺样式),求在下面的<类里面写代码>设置该菜单的根菜单的背景图片,而子菜单不设背景图片.能加上其他的样式更好 ...

  2. 智慧珠海的主界面左滑菜单及ViewPager和RadioButton的使用

    左滑菜单部分: 引导页进入到主界面后使用左滑菜单的话,界面分为左滑菜单Fragment和主界面Fragment. 左滑菜单:SlidingMenu.用的话需要在AndroidStudio中File - ...

  3. 带你实现开发者头条(二) 实现左滑菜单

    title: 带你实现开发者头条(二) 实现左滑菜单 tags: 左滑菜单,android 自带侧滑,DrawerLayout grammar_cjkRuby: true --- 今天开始模仿开发者头 ...

  4. 带你实现开发者头条(二) 实现左滑菜单

    今天开始模仿开发者头条的侧滑菜单,是本系列第二篇文章,相信大家已经看到很多app使用这种侧滑.今天我来教大家用android自带DrawerLayout控件实现. DrawerLayout是Suppo ...

  5. 自定义背景android,Android自定义Button并设置不同背景图片的方法

    本文实例讲述了Android自定义Button并设置不同背景图片的方法.分享给大家供大家参考,具体如下: 1.自定义MyButton类 public class MyButton extends Bu ...

  6. Winforn中实现ZedGraph自定义添加右键菜单项(附源码下载)

    场景 Winform中实现ZedGraph中曲线右键显示为中文: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100115292 ...

  7. 安卓中如何实现左滑菜单

    效果图 特性 支持左滑和右滑显示一个菜单项,尚不支持更灵活的方式. 主要代码 class SlideLayout(context: Context?, attrs: AttributeSet? = n ...

  8. 乐乐音乐播放器(六) 仿酷狗的左滑菜单

    源码下载:http://www.eoeandroid.com/thread-588446-1-1.html 该功能主要是使用开源的SlidingMenu来实现的,其中盗用了这篇文章的大部分代码,htt ...

  9. win7自定义随机更换显示桌面背景图片

    在网上看到了好几张漂亮的图片,都想作为桌面背景图片,随机更换,于是搜索方法,因为win7自带的主题有的就是随机更换背景的,所以想着自己是不是可以新建一个主题,也能实现那个效果. 果然,还是微软强悍- ...

最新文章

  1. 使用opennlp进行文档分类
  2. 美团架构师开发平台架构之容器技术实践!
  3. 《南溪的目标检测学习笔记》——性能优化的学习笔记
  4. AtmelStudio 7 ASF库学习笔记二:串口收发和printf打印
  5. 2022-2027年中国婴幼儿床上用品市场竞争态势及行业投资前景预测报告
  6. 软工网络15团队作业8——Beta阶段敏捷冲刺(Day3)
  7. 相忘于江湖:《监控》
  8. 左手技术,右手生态 英特尔如何打响名为“数据”的战争?
  9. 免费计算机论文 阅读,关于计算机的毕业论文
  10. 程序员职场规划之走向技术管理-安晓辉-专题视频课程
  11. 15秒,找到行业内最专业的内容,你想要吗
  12. 1607_PC汇编语言_汇编语言简介
  13. android ksoap用法
  14. 医美“轻”触网,“直播+视频面诊”能为美团医美乘风破浪吗?
  15. Js 之移动端图片上传插件mbUploadify
  16. 关于Altium designer中45°、90°及圆弧线的切换
  17. 【Linux】-- 开发工具yum、vim、gcc、g++、gdb、make、makefile使用介绍
  18. urllib.parse.quote报错surrogates not allowed
  19. 窄带蜂窝物联网_如何解决蜂窝物联网囚徒的困境
  20. 透视Linux内核神奇的BPF 一

热门文章

  1. 我读经典系列(一)《我读先秦诸子》易中天教授讲稿的简要摘录
  2. android app防止锁屏_Android 禁止屏幕休眠和锁屏的方法
  3. android app防止锁屏_解决安卓app锁屏掉线问题
  4. 位移传递率matlab编程,各种谱计算,频响函数,传递率
  5. 基于java家庭理财记账系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  6. 基于egou论坛的新帖子提醒chrome扩展
  7. cmmi实践访谈测试ppt_CMMI3级访谈问题(最新)
  8. 认识电子计算机ppt幼儿园,大班科学优质课教案《认识电子计算器》含PPT课件
  9. BUUCTF【ez_pz_hackover_2016】
  10. CPU处理器检测工具