UISwipeActionsConfiguration
-UIContextualAction
image.png
//左滑事件
- (nullable UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath API_AVAILABLE(ios(11.0)){
return [UISwipeActionsConfiguration configurationWithActions:[self getActionsWithType:indexPath.row % 3]];
}
-(NSArray *)getActionsWithType:(RJActionType)type{
NSArray *titleArrray;
if (type==RJActionType_text) {
titleArrray = @[@"删除",@"不显示",@"标为已读"];
}else if (type==RJActionType_image){
titleArrray = @[@"",@"",@""];
}else if (type==RJActionType_textImage){
titleArrray = @[@"删除",@"不显示",@"标为已读"];
}
UIContextualAction *action1 = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleDestructive title:titleArrray[0] handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
NSLog(@"UIContextualAction-删除要实现的代码");
completionHandler(NO);//调用次回调以后,点击以后会回到复原Cell,传YES/NO没有发现区别
}];
UIContextualAction *action2 = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleNormal title:titleArrray[1] handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
NSLog(@"UIContextualAction-不显示要实现的代码");
completionHandler(NO);
}];
UIContextualAction *action3 = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleNormal title:titleArrray[2] handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
NSLog(@"UIContextualAction-标为已读要实现的代码");
completionHandler(NO);
}];
action1.backgroundColor = [UIColor colorWithRed:227/255.0 green:90/255.0 blue:80/255.0 alpha:1];
action2.backgroundColor = [UIColor colorWithRed:227/255.0 green:151/255.0 blue:73/255.0 alpha:1];
action3.backgroundColor = [UIColor colorWithRed:66/255.0 green:66/255.0 blue:66/255.0 alpha:1];
if (type == RJActionType_image || type == RJActionType_textImage) {
action1.image = [UIImage imageNamed:@"rj_tableview_shanchu"];
action2.image = [UIImage imageNamed:@"rj_tableview_buxianshi"];
action3.image = [UIImage imageNamed:@"rj_tableview_yidu"];
}
return @[action1,action2,action3];
}
//UITableView -> _UITableViewCellSwipeContainerView -> UISwipeActionPullView -> UISwipeActionStandardButton(UIView + UIButtonLabel)
- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath {
for (UIView * subContainerView in tableView.subviews) {
if ([subContainerView isKindOfClass:NSClassFromString(@"_UITableViewCellSwipeContainerView")]) {
for (UIView * pullView in subContainerView.subviews) {
if ([pullView isKindOfClass:NSClassFromString(@"UISwipeActionPullView")]) {
for (UIView *standardButton in pullView.subviews) {
if ([standardButton isKindOfClass:NSClassFromString(@"UISwipeActionStandardButton")]) {
for (UIView *endView in standardButton.subviews) {
if ([endView isKindOfClass:NSClassFromString(@"UIImageView")]) {
NSLog(@"UIImageView-%@",endView);
continue;
}
if ([endView isKindOfClass:NSClassFromString(@"UIButtonLabel")]) {
NSLog(@"UIButtonLabel-%@",endView);
continue;
}
if ([endView isKindOfClass:NSClassFromString(@"UIView")]) {
NSLog(@"UIView-%@",endView);
endView.userInteractionEnabled = YES;
continue;
}
}
}
}
}
}
}
}
}
左滑后的层级关系
左滑前的层级关系
左滑后的层级关系
左滑后的展开层级关系
由图可以看出:
- 左滑以前
(RJListTableViewCell *)
之间是并列的 - 左滑以后目标
(RJListTableViewCell *)
被(_UITableViewCellSwipeContainerView *)
包装了起来,而此时被(_UITableViewCellSwipeContainerView *)
包装的还有(UISwipeActionPullView *)
,而此时(_UITableViewCellSwipeContainerView *)
与正常的cell
之间是并列的
层级关系: UITableView -> _UITableViewCellSwipeContainerView -> UISwipeActionPullView -> UISwipeActionStandardButton(UIView + UIButtonLabel)
((UITableView *)0x7fee29831e00)
((_UITableViewCellSwipeContainerView *)0x7fee25c23c70)
((UISwipeActionPullView *)0x7fee25c056b0)
((UISwipeActionStandardButton *)0x7fee25c1f550)
((UIView *)0x7fee25c1b680)
((UIButtonLabel *)0x7fee25c2b5e0)
网友评论