• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - UITableView “swipe to delete” 按钮框架问题

[复制链接]
菜鸟教程小白 发表于 2022-12-13 00:31:48 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我在我的应用程序中使用了自定义 UITableViewCell,我正在尝试调整“滑动删除”按钮的框架。

这就是我正在做的:

- (void)layoutSubviews {
    [super layoutSubviews];
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) return;
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:0.0f];
    for (UIView *subview in self.subviews) {
        if ([NSStringFromClass([subview class]) isEqualToString"UITableViewCellDeleteConfirmationControl"]) {
            CGRect newFrame = subview.frame;
            newFrame.origin.x = newFrame.origin.x - 25;
            subview.frame = newFrame;
        } else if ([NSStringFromClass([subview class]) isEqualToString"UITableViewCellEditControl"]) {
            CGRect newFrame = subview.frame;
            newFrame.origin.x = newFrame.origin.x - 25;
            subview.frame = newFrame;
        }
    }
}

它出现在新的位置,这很棒。但是,当我单击按钮使其消失时,按钮似乎突然向左移动了大约 10 个点,然后被移除。

为什么会发生这种情况,我该如何解决?



Best Answer-推荐答案


我不熟悉您使用的动画代码,但我会尝试使用 willTransitionToState (以及,如果需要,didTransitionToState )而不是 layoutSubviews 在编辑 tableViewCells 期间处理动画。

从 iOS 3.0 开始,两者都可用。

将此代码放在 UITableViewCell 的子类中。它将处理来自一个 UITableViewCellStateMask 的所有转换。到另一个,您可以实现转换到每个状态所需的动画。只需根据我添加的 NSLog 在适当的位置实现您需要的动画即可。 (再次,不熟悉你的动画代码,但我确实测试过它并使用此代码看到了结果)

- (void)willTransitionToStateUITableViewCellStateMask)state {

    [super willTransitionToState:state];

    if (state == UITableViewCellStateDefaultMask) {

        NSLog(@"Default");
        // When the cell returns to normal (not editing)
        // Do something...

    } else if ((state & UITableViewCellStateShowingEditControlMask) && (state & UITableViewCellStateShowingDeleteConfirmationMask)) {

        NSLog(@"Edit Control + Delete Button");
        // When the cell goes from Showing-the-Edit-Control (-) to Showing-the-Edit-Control (-) AND the Delete Button [Delete]
        // !!! It's important to have this BEFORE just showing the Edit Control because the edit control applies to both cases.!!!
        // Do something...

    } else if (state & UITableViewCellStateShowingEditControlMask) {

        NSLog(@"Edit Control Only");
        // When the cell goes into edit mode and Shows-the-Edit-Control (-)
        // Do something...

    } else if (state == UITableViewCellStateShowingDeleteConfirmationMask) {

        NSLog(@"Swipe to Delete [Delete] button only");
        // When the user swipes a row to delete without using the edit button.
        // Do something...
    }
}

如果您需要在这些事件之一之后发生某些事情,只需实现相同的代码,但在 didTransitionToState 中。应用相同的 UITableViewCellStateMask

关于ios - UITableView “swipe to delete” 按钮框架问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14325758/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap