ios - 如何在 UIView 类中调用 presentViewController?

标签 ios swift uiview presentviewcontroller

我的项目中有一个自定义选项卡,它位于应用程序的每个屏幕上,因此我创建了自定义 UIView 类和 xib 文件,并在其中添加了按钮。现在我想要我的按钮在具有不同 story board id 的不同屏幕上进行导航。但是我不能从 UIView 类中调用 presentViewController。以前我在 extension 类中自定义函数以在屏幕之间导航,但 UIView 类也无法调用该函数。

import UIKit

@IBDesignable class tab: UIView {

var view: UIView!

@IBAction func btn1(sender: UIButton) {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewControllerWithIdentifier("6")
    self.presentViewController(vc, animated: true, completion: nil)
}
override init(frame: CGRect) {
    super.init(frame: frame)
    xibSetup()
}

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    xibSetup()
}

func xibSetup() {
    view = loadViewFromNib() 
    view.frame = bounds 
    view.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight] 
    addSubview(view)
} 
func loadViewFromNib() -> UIView {
    let bundle = NSBundle(forClass: self.dynamicType)
    let nib = UINib(nibName: "tab", bundle: bundle) 
    let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
    return view
} 
}

最佳答案

在你的按钮上调用这个函数

func infoClick()  {

        let storyboard: UIStoryboard = UIStoryboard (name: "Main", bundle: nil)
        let vc: CampainDetailView = storyboard.instantiateViewControllerWithIdentifier("campainDetailView") as! CampainDetailView
        let currentController = self.getCurrentViewController()
        currentController?.presentViewController(vc, animated: false, completion: nil)

    }

这个函数将创建 Root View Controller

 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

}

上面的代码必须有效,它适用于 Swift 4.0

关于ios - 如何在 UIView 类中调用 presentViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34649173/

相关文章:

iphone - 在应用程序运行时阻止 Iphone 中的调用

ios - 如何删除我用循环创建的多个按钮?

objective-c - 将 UIImageView 随机放置在 UIView 上并且不重叠

ios - 在 iOS 中实现音频波形 View 和音频时间轴 View ?

ios - 核心数据+互斥锁+死锁

ios - 应用程序在后台运行时如何处理 AVPlayer 错误?

ios - 如何检查用户是否可以登录 CloudKit?

ios - UITextField 没有对 UITextContentType 给出任何建议

swift - 如何将值从我的 SplitView Controller 传递到 map ?

ios - 在嵌套函数中返回 bool