一、iOS 11之前的处理方法

我们知道UITableViewCell默认的删除按钮样式为红色背景、白色字体;怎么样来修改按钮的样式呢?网上查询大多的做法是通过遍历cell的subViews获取这个删除按钮然后修改样式;话不多说直接上代码:

- layoutSubviews{ [super layoutSubviews]; for (UIView *subView in self.subviews) { if (X >= WIDTH { for (UIView *childView in subView.subviews) { if ([childView isKindOfClass:[UIButton class]]) { UIButton *delBtn = (UIButton *)childView; [delBtn setBackgroundColor:[UIColor orangeColor]]; [delBtn setTitleColor:[UIColor purpleColor] forState:(UIControlStateNormal)]; break; } } } }}

在尝试获取这个删除按钮的时候试了不少方法,按网上说的cellforrow、cellwilldisplay等方法里都没获取到;后来经尝试发现在cell的layoutsubviews方法里可以读取到(自定义cell在正常状态下有三个子view,contentView、和两个分割线view,编辑时会出现第四个view);因为contentView里面也可能会有button所以加了个位置判断,如果view的左侧超出屏幕右侧说明是编辑view(删除按钮默认是在contentView的右侧);如果想完全自定义右侧的删除按钮可以给这个button添加自定义视图,大家可以自己尝试一下;然后删除按钮的标题修改系统提供了一个代理方法:

- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{ return @"点击删除";}

修改后效果如下图:

图片 1效果图Demo地址

前言

<br
>PCH文件,又称预编译头文件(一般扩展名为.pch),是把一个工程中较稳定的代码预先编译好放在一个文件里,它们在整个工程中是较为稳定的,即在工程开发过程中不会经常被修改的代码。为什么需要预编译头文件?简单点就是提高编译速度,一处编译,多处使用。比如我们在iOS开发界面布局中,可能会时常获取屏幕的宽度或者高度,我们可把屏宽高以宏定义的形式存在pch文件里,这样,在所有的类文件中,都可以访问该宏定义,而无需导入任何东西,这是由于pch文件已经在工程启动时预先编译了。

Xcode 6之前,会自动生成对应的PCH文件,但在Xcode
6以后,就不再生成了,具体的原因可参考StackOverFlow上讨论。

点我

图片 2

二、iOS 11之后的解决方法

记录下过程:

<br
>1、command + N,打开新建文件窗口:iOS -> Other ->PCH File,点击Next.

图片 3

2.在弹框中Save As项里输入PCH文件名点击creat创建

3.修改pch文件路径:Target ->Build Setting ->Prefix Header选项路径中添加
$/项目名称/PCH文件名。(例如:$(PROJECT_DIR)/Project name/PrefixHeader.pch

图片 4

4.将Precompile Prefix Header置为YES,预编译后的PCH文件会被缓存起来,可以提高编译速度。

5编译下看看有没有错误,一般都是路径设置错了,自己检查一下,是否正确.

6.我在网上又看到这段话:

图片 5哎呦

大概意思就是 要加上下面这段话,不然会报错:#ifdef OBJC#import
<UIKit/UIKit.h>#import <Foundation/Foundation.h>#endif

我自己测试的时候,在没有用cocoapods安装第三方库之前,编译时可以的,安装以后再次编译就会有错,加上可以了.

一切的动画其实都是假象,3D效果也是这样.本篇我们来做一个这样的特效.

0、在iOS 11中系统修改了编辑按钮的实现方式,新加入了一个UISwipeActionPullView类,而且这个控件不是添加在cell里了,是tableview的subView。所以之前通过取cell的subView来修改样式的方法行不通了。

图片 6

1、iOS 11系统修改了编辑按钮的实现方式,通过下面的两个代理方法用户可以配置多个编辑按钮并自定部分样式(可设置背景色,背景图片等)。
- (nullable UISwipeActionsConfiguration *)tableView:(UITableView *)tableView leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath API_AVAILABLE) API_UNAVAILABLE;- (nullable UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath API_AVAILABLE) API_UNAVAILABLE;

先忽略掉3D效果,我们先要做的是一个右拉的抽屉效果.总体思路:1.创建一个ContainerViewController容器控制器,然后把左侧选择菜单的SideMenuViewController,和右侧负责显示内容的MainViewController
添加到ContainerViewController中.2.给容器控制器ContainerViewController添加一个手势监听,通过修改偏移量完成抽屉效果.3.设置anchorPoint,给左侧SideMenuViewController的view以及左上角的图片按钮添加3D效果.

2、虽然通过系统的方法可以修改编辑按钮的样式,但系统提供的还不够,不能完全自定义样式。所以可以按照以前的思路取出这个UISwipeActionPullView然后拿到编辑按钮修改样式。因为这个控件是tableview的子控件所以我们可以自定义tableView类,然后通过layoutsubView方法来拿到这个控件,并修改它的样式。
- layoutSubviews{ [super layoutSubviews]; for (UIView *subView in self.subviews) { if ([subView isKindOfClass:NSClassFromString(@"UISwipeActionPullView")]) { subView.backgroundColor = [UIColor orangeColor]; for (UIView *view in subView.subviews) { if ([view isKindOfClass:[UIButton class]]) { UIButton *btn = (UIButton *)view; [btn setTitleColor:[UIColor redColor] forState:(UIControlStateNormal)]; [btn setBackgroundColor:[UIColor orangeColor]]; } } } }}

如果想知道详情请看代码,我们这边把核心的部分说下:

发表评论

电子邮件地址不会被公开。 必填项已用*标注