• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 获取 UIStackView 中的第一个 UIButton

[复制链接]
菜鸟教程小白 发表于 2022-12-11 18:46:44 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在处理我的 View ,但在堆栈 View 中的按钮周围出现阴影时遇到了问题。我所做的大部分工作都直接在 Storyboard中。

Storyboard render showing background

Simulator render missing background

这是我用来将阴影应用到 View 的方法

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

的 View 中找到按钮的方式
for subview in self.view.subviews {
    if subview.isKind(of: UIButton.self) && subview.tag == 1 {
        addShadow(to: subview)
    }
}

我知道问题出在堆栈 View 和堆栈 View 内的 UIView 中,其中包含按钮。 (self.view > UIStackView > UIView > [UIButton, UILabel])

我知道我可以通过 for-loop 中的递归来做到这一点,但我试图更精确一点以优化性能,并且更愿意一次性添加阴影。



Best Answer-推荐答案


你有几个选择:

  1. 在 Storyboard 本身中添加阴影
  2. 为按钮添加一个 socket ,然后在代码中添加阴影
  3. 将按钮添加到集合中,然后枚举集合添加阴影
  4. 递归添加阴影(这不会像您想象的那样严重影响性能,添加阴影比递归执行此操作更会损害性能)

你是正确的,因为按钮是堆栈 View 上的一个 View ,所以你的 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)
}

如果您需要有关如何执行任何其他方式的说明,请发表评论。

关于ios - 获取 UIStackView 中的第一个 UIButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41948710/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap