在tableview的部分中。我有一些可选择的行。
在该部分的标题内,我有一个Deselect All
按钮。
如果选择了行,则需要启用deselect all
按钮,如果未选择任何行,则需要禁用。
通过读取布尔值来启用/禁用该按钮。我在布尔值上有一个didSet
:
var shouldEnableDeselectButton = false
{
didSet{
if oldValue != shouldEnableDeselectButton{
DispatchQueue.main.async {
self.notesTable.reloadSections([self.indexofFilter], with: .none)
}
}
}
}
didSet
中完全没有做任何事情,那么它只会通过出列或向上或向下滚动并离开屏幕来更新。
见下文:self.notesTable.reloadSections([someSection], with: .none)
,则更长时间要求部分标题出列。然而,如果我选择其中一个最后行,那么它会严重抖动:
见下文:我在线查看并找到了Reload tableview section without scroll or animation提到的解决方案,但它们仍然抖动
答案 0 :(得分:0)
需要做两件事:
获取headerView的引用/指针。例如。 this回答。
将您的按钮设为属性。我最初只是作为一个子视图。那还不够!
为此,我将sectionHeader设为Date
子类,然后将该按钮添加为属性。
然后我只能更改按钮的func applicationDidEnterBackground(_ application: UIApplication) {
// Your application can present a full screen modal view controller to
// cover its contents when it moves into the background. If your
// application requires a password unlock when it retuns to the
// foreground, present your lock screen or authentication view controller here.
let blankViewController = UIViewController()
blankViewController.view.backgroundColor = UIColor.black
// Pass NO for the animated parameter. Any animation will not complete
// before the snapshot is taken.
window.rootViewController?.present(blankViewController, animated: false)
}
func applicationWillEnterForeground(_ application: UIApplication) {
// This should be omitted if your application presented a lock screen
// in -applicationDidEnterBackground:
window.rootViewController?.dismiss(animated: false) false
}
属性。