从 UIViewController 类中隐藏自定义视图 UIButton
Posted
技术标签:
【中文标题】从 UIViewController 类中隐藏自定义视图 UIButton【英文标题】:Hide Custom View UIButton From UIViewController Class 【发布时间】: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.
【问题讨论】:
【参考方案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
做。以上是关于从 UIViewController 类中隐藏自定义视图 UIButton的主要内容,如果未能解决你的问题,请参考以下文章
从 UIButton 的类中获取当前的 UIViewController
是否可以根据从 Swift 中的 UIViewController 继承的类中的另一个来初始化变量?
是否使用 getter 和 setter 将消息从父 UIViewController 传递到 UIView 类中的方法?
如何从另一个/第二个 UIViewController 隐藏 UILabel?
需要从 appdelegate 加载 UIViewController 并在 Storyboard App 中加载时隐藏 UITabBarController
如何使用 PushViewController 方法从 UIViewClass 导航到 UIViewController 类