簡體   English   中英

獲取UIStackView中的第一個UIButton

[英]Get the first UIButton in a UIStackView

我正在處理我的視圖,但在堆棧視圖中的按鈕周圍出現陰影時遇到問題。 我所做的大部分工作都直接在情節提要中進行。

故事板渲染顯示背景

模擬器渲染缺少的背景

這是我用來將陰影應用於視圖的方法

func addShadow(to view: UIView) {
    view.layer.shadowColor = shadowColor
    view.layer.shadowOpacity = shadowOpacity
    view.layer.shadowOffset = shadowOffset
    if let bounds = view.subviews.first?.bounds {
        view.layer.shadowPath = UIBezierPath(rect: bounds).cgPath
    }

    view.layer.shouldRasterize = true
}

這就是我從ViewController.swift在視圖中查找按鈕的方式

for subview in self.view.subviews {
    if subview.isKind(of: UIButton.self) && subview.tag == 1 {
        addShadow(to: subview)
    }
}

我知道問題源於堆棧視圖和包含按鈕的堆棧視圖內部的UIView。 (self.view> UIStackView> UIView> [UIButton,UILabel])

我知道我可以在for-loop使用遞歸來做到這一點,但我正在嘗試更加精確地優化性能,並且希望一次添加陰影。

您有幾種選擇:

  1. 在情節提要中添加陰影
  2. 在按鈕上添加插座,然后在代碼中添加陰影
  3. 將按鈕添加到集合中,然后枚舉集合中的陰影
  4. 遞歸地添加陰影(這不會像您想的那樣嚴重影響性能,添加陰影比遞歸地增加對性能的損害更大)

您是正確的,因為該按鈕是堆棧視圖上的一個視圖,因此您的for循環不會直接點擊該按鈕來為其添加陰影。

解決此問題的最簡單方法是到目前為止的遞歸方法,或類似這樣的方法:

func addShadowsTo(subviews: [UIView]) {
    for subview in subviews {
        if subview.isKind(of: UIButton.self) && subview.tag == 1 {
            addShadow(to: subview)
        }

        if let stackView = subview as? UIStackView {
            addShadowToSubviews(subviews: stackView.subviews)
        }
    }
}

func viewDidload() {
    super.viewDidLoad()

    addShadowsTo(subviews: view.subviews)
}

如果您想獲得有關其他方法的一些說明,只需評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM