如何对儿童可见度的变化做出反应?

Posted

技术标签:

【中文标题】如何对儿童可见度的变化做出反应?【英文标题】:How to react on a change of visibility of children? 【发布时间】:2018-02-08 10:11:35 【问题描述】:

我有不同的容器项目,我想让它们的所有子项都不可见时不可见。

动态地,一些代码递归地解析所有项目,并根据某些过滤器(如搜索输入)将它们设置为可见或不可见。此过滤将忽略容器项。

过滤后,我如何检测可见性已更改并相应地更新我的容器项目?

到目前为止,我有这段代码,但每次更改子项的可见性时我都需要执行此代码:

visible: visibleChildren.size > 0

【问题讨论】:

【参考方案1】:

试试这个:

visible: visibleChildren.length > 0

事实上,只有visible: visibleChildren.length 也可以。

visibleChildren.sizeundefined - 没有 size 成员。

请记住,根据以下代码的行为判断,您将无法将项目重新设置为可见:

  MouseArea 
    anchors.fill: parent
    onClicked: inner.visible = !inner.visible
  

  Rectangle 
    id: outer
    anchors.fill: parent
    color: "blue"
    visible: visibleChildren.length
    Rectangle 
      id: inner
      width: 50
      height: 50      
      color: "red"
    
  

一旦父项变得不可见,内部项的可见性始终为 false,即使明确设置为 true。

如果父级不可见,则无法将子级设置为可见,因此一旦visibleChildren 为空,就无法通过将子级设置为可见来填充它。父项不可见时,子项不能设置为可见,如果子项不可见,则父项不可见。

因此,如果您需要这种行为,您将不得不实现一些其他可见性跟踪机制,而不是使用visibleChildren

【讨论】:

以上是关于如何对儿童可见度的变化做出反应?的主要内容,如果未能解决你的问题,请参考以下文章

如何对 UIView 上的自动布局约束引起的大小变化做出反应?

如何让 rhandsontable 对输入值的变化和自身的变化做出反应?

对于 iO,我有一个 if / else 代码块,对 UISwitch 中的变化做出反应。在某些情况下如何将 uiswitch 设置回关闭?

为啥内部值会对整个 ref 的变化做出反应?

Xamarin,对时区变化做出反应

如何在页面加载时在反应打字稿中设置可见性