我有一个带按钮的手机。当我按下按钮时,我会启动一个动画,表示有东西正在准备。我在@IBAction函数中这样做:(这是在我的自定义tableViewCell函数中)。

@IBAction func playNowTapped(_ sender: UIButton) {
    let loadingShape = CAShapeLayer()
    //Some animating of the shape
}

我在@IBAction中定义这个形状,因为如果我再次按下按钮,这个过程应该重复
但是,由于在tableView的cellForRowAt函数中只有设备上显示的必要单元格加载在一个块中,因此,如果在加载动画时向下滚动,我的动画将每隔几个单元格重复一次。
到目前为止,我所做的是通过定义一个函数并在按钮的@IBAction函数中调用它来将以前按下的所有按钮添加到列表中,如下所示:
func findCell() {
    //Iterate tableView list and compare to current cellText
    for value in list {
        if value == cellText.text {
             //If found, checking if value is already stored in pressedBefore
             for selected in pressedBefore {
                 if selected == value { return }
             }
             alreadyPlay.append(song: cellText.text!)
        }
    }
}

然后,在我的cellForRowAt函数中,我简单地执行一个反向操作,检查列表中的当前索引是否与已选定索引中的任何值相同。
所有这些都被过滤掉了,我现在只有一个未被选中的列表,但是,我不知道现在该怎么办。
奇怪的是,cell.bringSubview(tofront: cell.cellText)cell.bringSubview(tofront: cell.buttonText)并没有改变子视图的顺序。我现在该怎么办?是否有可能CAShapeLayer()不被视为子视图,而只是一个层?
提前谢谢你!

最佳答案

奇怪的是,cell.bringSubview(tofront:cell.cellText)
cell.bringSubview(tofront:cell.buttonText)不会更改子视图的顺序。我现在该怎么办?
bringSubview(tofront:)仅适用于直接子视图。传统上,cellText和buttonext是cell.contentView的子视图。
所以试试看

cell.contentView.bringSubview(tofront: cell.buttonText)

是否有可能CAShapeLayer()不被视为子视图,但是
只有一层?
是的,CAShapeLayer继承自CALayer,仅被视为其视图的一个层,可能需要通过layoutSubviews()draw()进行更新
看到那些嵌套的for循环和if语句,我想我可以提供一种清理它们的方法。
func findCell() {
    //find list elements that match cell's text and ensure it hasn't been pressed before
    list.filter { $0 == cellText.text && !pressedBefore.contains($0) }.forEach {
        alreadyPlay.append(alreadyPlayed(song: LeLabelOne.text!, artist: leLabelThree.text!))
    }
}

// alternative using Sets
func findCell() {
    let cellTextSet = Set(list).intersection([cellText.text])

    // find entries in cellTextSet that haven't been pressed before
    cellTextSet.subtract(Set(pressedBefore)).forEach {
        alreadyPlay.append(alreadyPlayed(song: LeLabelOne.text!, artist: leLabelThree.text!))
    }
}

关于ios - 将单元格的 subview 移到前部swift,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49519025/

10-16 23:46