gpt4 book ai didi

ios - 直观地改进 iOS 11leadingSwipeActions 的异步操作

转载 作者:行者123 更新时间:2023-11-30 11:33:00 25 4
gpt4 key购买 nike

我想在用户向右滑动单元格时显示加载指示器,这会触发异步操作。当此操作正在进行时,我想将标签隐藏在里面,保持单元格“内联”,而不是“可重新滑动”,并显示已经提到的指示器。

这是我到目前为止所得到的,它已经部分起作用:

override func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {

let action = UIContextualAction(style: .normal, title: "My Action") { (action, view, handler: @escaping (Bool) -> Void) in

// Getting UIButtonLabel, which is a subclass of UILabel
guard let label = view as? UILabel else {
return
}

// Not used right now
guard let superView = label.superview else {
return
}


// Try to hide the existing label
label.text = "" // Doesn't work
label.attributedText = nil // Doesn't work
label.textColor = UIColor.clear // Doesn't work

// Add a loading indicator at the position of the label, works!
let loadingIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.white)
loadingIndicator.translatesAutoresizingMaskIntoConstraints = false
loadingIndicator.startAnimating()
label.addSubview(loadingIndicator)
NSLayoutConstraint.activate([
loadingIndicator.centerXAnchor.constraint(equalTo: label.centerXAnchor),
loadingIndicator.centerYAnchor.constraint(equalTo: label.centerYAnchor),
loadingIndicator.heightAnchor.constraint(equalTo: label.heightAnchor, multiplier: 0.8),
loadingIndicator.widthAnchor.constraint(equalTo: loadingIndicator.heightAnchor)
])

self.viewModel.doAsyncAction(completionHandler: { (success) in
loadingIndicator.stopAnimating()
loadingIndicator.removeFromSuperview()
handler(true)
})))
}

action.backgroundColor = .darkGray

return UISwipeActionsConfiguration(actions:[action])

}

我可以在正确的位置添加加载指示器。我仍然无法隐藏标签。删除它或设置它的 alpha 或隐藏状态将不起作用,因为加载指示器必须是它​​的 subview (对于 UITableView 的内部定位)。

此外,我可以通过稍后调用回调处理程序来阻止用户再次拉动操作,但我无法使单元格保持在“一级内联”滑动位置。当用户没有滑动单元格并单击按钮,而是决定滑动单元格来触发操作时,这尤其难看。在这种情况下,我希望单元格自动移动到“一级内联”位置。

有人知道这方面的技巧吗?我已经在一些应用程序中看到了这一点。是否有针对此类内容的通用 UIKit 添加?

最佳答案

我发现的一种方法是禁用 super View ,它是 UIButton 的子类。

您可以通过以下方式获取

            guard let superView = label.superview as? UIButton else {
return
}

然后通过执行禁用它

            superView.isEnabled = false
label.isEnabled = false
label.isUserInteractionEnabled = false // Probably not required

这样,按钮内的标签就会显得稍微褪色。此外,它还可以防止用户多次单击该按钮。

当用户“滑动到操作”时,它看起来不会那么好,因为操作按钮将保持在滑动位置。但也许这也是可以轻松调整的东西?!

关于ios - 直观地改进 iOS 11leadingSwipeActions 的异步操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50056278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com