从 UITabBar 获取 UIImageView

Get UIImageView from UITabBar

提问人:kiran 提问时间:12/16/2022 更新时间:12/16/2022 访问量:111

问:

如何从特定项目中获取 imageView。从下面的代码中,其突出显示进入特定部分视图。UITabBar

我只需要为 CoachMark 突出显示“更多”选项卡。UIImageView

如何从UITabBar获取UIImageView值?

        guard let view = self.tabBarController?.tabBar.items?.last?.value(forKey: "view") as? UIView else{
            return coachMarksController.helper.makeCoachMark()
        }
       // let imageView = view.subviews.compactMap { $0 as? UIImageView }.first
       // return coachMarksController.helper.makeCoachMark(for: imageView) // Fails

        return coachMarksController.helper.makeCoachMark(for: view)

enter image description here

swift uitabbarcontroller tabbar uitabbaritem

评论


答:

0赞 Brandon Stillitano 12/16/2022 #1

将这些扩展程序添加到您的应用。

import UIKit

public extension UITabBar {
    var tabBarButtons: [UIView] {
        let values = self.subviews.filter({ String(describing: type(of: $0)) == "UITabBarButton" })
        return values.sorted(by: { $0.frame.origin.x < $1.frame.origin.x })
    }
}

public extension UIView {
    var tabBarSwappableImageViews: [UIView] {
        let values = self.subviews.filter({ String(describing: type(of: $0)) == "UITabBarSwappableImageView" })
        return values.sorted(by: { $0.frame.origin.x < $1.frame.origin.x })
    }
}

然后在选项卡栏控制器上调用此函数

let imageView: UIImageView? = UITabBarController?.tabBar.tabBarButtons[YOUR_INDEX_HERE].tabBarSwappableImageViews.first

评论

0赞 kiran 12/18/2022
对于第一个索引,它完美地工作。但是当使用第二个索引时,其失败将返回空数组。self.tabBarController?。tabBar.tabBarButtons[1].tabBarSwappableImageViews ▿ 可选<Array<UIView>> - 一些:0个元素