ios - 获取 UIStackView 中的第一个 UIButton
<p><p>我正在处理我的 View ,但在堆栈 View 中的按钮周围出现阴影时遇到了问题。我所做的大部分工作都直接在 Storyboard中。</p>
<p> <img src="/image/6hjwz.png" alt="Storyboard render showing background"/> </p>
<p> <img src="/image/tGCbp.png" alt="Simulator render missing background"/> </p>
<p>这是我用来将阴影应用到 View 的方法</p>
<pre><code>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
}
</code></pre>
<p>这就是我在 <code>ViewController.swift</code></p> 的 View 中找到按钮的方式
<pre><code>for subview in self.view.subviews {
if subview.isKind(of: UIButton.self) && subview.tag == 1 {
addShadow(to: subview)
}
}
</code></pre>
<p>我知道问题出在堆栈 View 和堆栈 View 内的 UIView 中,其中包含按钮。 (self.view > UIStackView > UIView > )</p>
<p>我知道我可以通过 <code>for-loop</code> 中的递归来做到这一点,但我试图更精确一点以优化性能,并且更愿意一次性添加阴影。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>你有几个选择:</p>
<ol>
<li>在 Storyboard 本身中添加阴影</li>
<li>为按钮添加一个 socket ,然后在代码中添加阴影</li>
<li>将按钮添加到集合中,然后枚举集合添加阴影</li>
<li>递归添加阴影(这不会像您想象的那样严重影响性能,添加阴影比递归执行此操作更会损害性能)</li>
</ol>
<p>你是正确的,因为按钮是堆栈 View 上的一个 View ,所以你的 for 循环不会直接点击按钮来为其添加阴影。</p>
<p>到目前为止,解决这个问题的最简单方法是递归方式,或者类似的方式:</p>
<pre><code>func addShadowsTo(subviews: ) {
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)
}
</code></pre>
<p>如果您需要有关如何执行任何其他方式的说明,请发表评论。</p></p>
<p style="font-size: 20px;">关于ios - 获取 UIStackView 中的第一个 UIButton,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/41948710/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/41948710/
</a>
</p>
页:
[1]