【问题标题】:Hide Custom View UIButton From UIViewController Class从 UIViewController 类中隐藏自定义视图 UIButton
【发布时间】:2017-05-12 07:16:49
【问题描述】:

实际上我有一个带有两个按钮的自定义视图,我想在运行时通过 UIViewController 隐藏它,所以我没有得到任何确切的东西来从 UIViewcontroller 类中隐藏那个按钮

这是我的 CustomView 类,

 import UIKit

class BottomButtonUIView: UIView {

    @IBOutlet weak var btnNewOrder: UIButton!
    @IBOutlet weak var btnChat: UIButton!

    override func awakeFromNib() {
        super.awakeFromNib()

    }

    // MARK: init
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
        if self.subviews.count == 0 {
            setup()
        }
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }

    func setup() {
        if let view = Bundle.main.loadNibNamed("BottomButtonUIView", owner: self, options: nil)?.first as? BottomButtonUIView {
            view.frame = bounds
            view.autoresizingMask = [.flexibleWidth, .flexibleHeight]

            addSubview(view)
        }
    }


    @IBAction func btnOrderNowClick(_ sender: Any) {


        let VC1 = StoryBoardModel.orderDeatalStoryBord.instantiateViewController(withIdentifier: "NewOrderViewController") as! NewOrderViewController
        VC1.isPush = false
        let navController = UINavigationController(rootViewController: VC1) // Creating a navigation controller with VC1 at the root of the navigation stack.

        let currentController = getCurrentVC.getCurrentViewController()
        currentController?.present(navController, animated:true, completion: nil)
    }
    @IBAction func btnChatNowClick(_ sender: Any) {
    }

    func getCurrentViewController() -> UIViewController? {

        if let rootController = UIApplication.shared.keyWindow?.rootViewController {
            var currentController: UIViewController! = rootController
            while( currentController.presentedViewController != nil ) {
                currentController = currentController.presentedViewController
            }
            return currentController
        }
        return nil

    }

}

我在 StoryBoard 中将其设置为 UIView,然后创建该视图的出口,

 @IBOutlet weak var viewBottmNewOrder: BottomButtonUIView!

现在我想从 UIViewcontroller 类中隐藏 btnNewOrder 但是当我使用时

 viewBottmNewOrder.btnNewOrder.isHidden = true it cause null exception, Please do need full answer.

【问题讨论】:

    标签: swift xib


    【解决方案1】:

    请不要那样做。当 BottomButtonUIView 从 xib 创建时,required init(coder aDecoder: NSCoder) 会调用很多次。您的自定义视图将如下所示:

    [BottomButtonUIView [ BottomButtonUIView [btnNewOrder, btnChat]]].

    所以当你像这样访问btnNewOrder 时: viewBottmNewOrder.btnNewOrder 它将为空。

    我认为你应该在你的 `UIViewController' 的viewDidLoad 中添加你的自定义视图。

    【讨论】:

    • 嗨,谢谢你的温柔回复,实际上我不想每次都在viewDidload中添加它,所以这就是我这样做的原因。请告诉我最好的方法将 CustomView 添加到 UIVIewcontroller 视图。
    • 这就是为什么 Apple 不建议使用 xib 创建新的自定义视图的原因。我认为您应该以编程方式添加 ui 元素。
    • 这里是自定义控件的文档。你应该阅读它。 apple.co/2r0JYvx
    • 好的,你的意思是我应该在 ViewDidLoad 方法中的 UIViewController UIView 中加载 xib?
    • 我的意思是你不应该在UIViewController 的 xib/storyboard 文件中添加自定义视图(使用 xib)。你需要在那个vc的viewDidLoad做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    相关资源
    最近更新 更多