iOS tableviewcell 左滑自定义view
今天接到一个特殊的需求
我手机iOS14的系统 所以只考虑了iOS14 的解决办法 不适用于所有iOS系统
- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath {
// 在 iOS11 以下系统,因为方法线程问题,需要放到主线程执行, 不然没有效果
dispatch_async(dispatch_get_main_queue(), ^{
[self setupSlideBtnWithEditingIndexPath:indexPath];
});
}
//MARK: 设置左滑按钮的样式
- (void)setupSlideBtnWithEditingIndexPath:(NSIndexPath *)editingIndexPath {
// 判断系统是否是 iOS13 及以上版本
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;
}
}
- (void)setupRowActionView:(UIView *)rowActionView {
//获取系统的删除按钮
UIButton *button = rowActionView.subviews.firstObject;
// 我这里创建了两个自定义view 防止切换的时候没有加载出来 会显示空白
if (self.isUseFirstBool) {
self.isUseFirstBool = NO;
[self.testDeleteView setFrame:CGRectMake(0, 0, button.bounds.size.width, button.bounds.size.height)];
[rowActionView addSubview:self.testDeleteView];
}else{
self.isUseFirstBool = YES;
[self.test2DeleteView setFrame:CGRectMake(0, 0, button.bounds.size.width, button.bounds.size.height)];
[rowActionView addSubview:self.test2DeleteView];
}
}
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
CGPoint redPoint = [self convertPoint:point toView:self.testDeleteView];
CGPoint red2Point = [self convertPoint:point toView:self.test2DeleteView];
if ([self.testDeleteView pointInside:redPoint withEvent:event]) {
NSLog(@"======= %f",redPoint.y);
if (!self.isFirstBool) {
self.isFirstBool = YES;
if (redPoint.y < self.deleteHeight) {
[PopTipView showInView:self wihtTipText:@"移入黑名单"];
}else if (redPoint.y > self.deleteHeight * 2){
[PopTipView showInView:self wihtTipText:@"忽略并删除"];
}else {
[PopTipView showInView:self wihtTipText:@"举报"];
}
}else{
self.isFirstBool = NO;
}
return [super hitTest:point withEvent:event];
}else if ([self.test2DeleteView pointInside:red2Point withEvent:event]){
NSLog(@"======= %f",red2Point.y);
if (!self.isFirstBool) {
self.isFirstBool = YES;
if (red2Point.y < self.deleteHeight) {
[PopTipView showInView:self wihtTipText:@"移入黑名单"];
}else if (red2Point.y > self.deleteHeight * 2){
[PopTipView showInView:self wihtTipText:@"忽略并删除"];
}else {
[PopTipView showInView:self wihtTipText:@"举报"];
}
}else{
self.isFirstBool = NO;
}
return [super hitTest:point withEvent:event];
}else {
return [super hitTest:point withEvent:event];
}
}
testDeleteView 就是自定义的view 暂时是把问题解决了 有点复杂 后面技术提升了 会在更新 这段代码
大神可以留言改进方案 学习学习 谢谢