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 暫時是把問題解決了 有點復雜 后面技術提升了 會在更新 這段代碼
大神可以留言改進方案 學習學習 謝謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/199860.html
標籤:其他
上一篇:2020-11-01
下一篇:Vue在組件上使用v-model
