「这是我参加11月更文应战的第17天,活动概略查看:2021最终一次更文应战」
前语
项目开发中tableView是一个很常用的UI控件, 系统的UITableView功用也已经是非常强壮了, 其中有个一个功用, 可能是我们不会竞常常用到的, 那就是tableView中的左滑删去功用, 系统的左滑删去也是非常的好看了, 可是事务总是会有各种的起码需求, 那么我们会有自定义左滑删去款式的需求, 那么假如进行自定义的左滑删去就是今天要说的功用了.
完结
当tableView即将进入编辑情况的时分的操作
- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath {
// 这儿需要放到主线程履行
dispatch_async(dispatch_get_main_queue(), ^{
[self setupSlideBtnWithEditingIndexPath:indexPath];
});
}
完结tableView的代理办法, 使tableView进入编辑情况的时分, 可以进行左滑删去以及后续的操作
- (NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewRowAction *action = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"删去标题" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
// 删去点击后的操作
[tableView setEditing:NO animated:YES];
}];
action.backgroundColor = hexColor(0xEB1163);
return @[action];
}
自定义左滑删去的款式.
在自定义左滑删去的时分需要判别 系统版别来操作, 不然就会有滑不动的情况产生
//MARK: - 设置左滑按钮的款式
- (void)setupSlideBtnWithEditingIndexPath:(NSIndexPath *)editingIndexPath {
if (@available(iOS 13.0, *)) {
for (UIView *subView in self.tableView.subviews) {
if ([subView isKindOfClass:NSClassFromString(@"_UITableViewCellSwipeContainerView")] && [subView.subviews count] >= 1) {
// 批改图片
UIView *remarkContentView = subView.subviews.firstObject;
[self setupRowActionView:remarkContentView];
}
}
return;
}
// 判别系统是否是 iOS11 及以上版别
if (@available(iOS 11.0, *)) {
for (UIView *subView in self.tableView.subviews) {
if ([subView isKindOfClass:NSClassFromString(@"UISwipeActionPullView")] && [subView.subviews count] >= 1) {
// 批改图片
UIView *remarkContentView = subView;
[self setupRowActionView:remarkContentView];
}
}
return;
}
// iOS11 以下的版别
MTMineCollectionTableViewCell *cell = [self.tableView cellForRowAtIndexPath:editingIndexPath];
for (UIView *subView in cell.subviews) {
if ([subView isKindOfClass:NSClassFromString(@"UITableViewCellDeleteConfirmationView")] && [subView.subviews count] >= 1) {
// 批改图片
UIView *remarkContentView = subView;
[self setupRowActionView:remarkContentView];
}
}
}
- (void)setupRowActionView:(UIView *)rowActionView {
// 切开圆角
[rowActionView cl_setCornerAllRadiusWithRadiu:20];
// 改动父 View 的frame,这句话是因为我在 contentView 里加了另一个 View,为了使划出的按钮能与其抵达同一高度
CGRect frame = rowActionView.frame;
frame.origin.y += kFitRealValue(7);
frame.size.height -= kFitRealValue(13);
rowActionView.frame = frame;
// 拿到按钮,设置图片
UIButton *button = rowActionView.subviews.firstObject;
[button setImage:kImageName(@"delete_col") forState:UIControlStateNormal];
[button setTitle:@"" forState:UIControlStateNormal];
}