ios - 如何以编程方式从 UIVIew 呈现 View Controller

标签 ios swift uiviewcontroller ibaction swiftmessages

我使用的类是 MessageView ( Swift Message Library) 的子类,继承自 UIView。在里面,我有一个 UIButton,我想通过它以编程方式呈现另一个 ViewController

下面是我的代码:

import Foundation
import SwiftMessages
import UIKit

class MyClass: MessageView {

    var hideBanner: (() -> Void)?


    @IBAction func helpButtonPressed(_ sender: UIButton) {
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "newViewController") as! NewViewController
        self.present(newViewController, animated: true, completion: nil)

    @IBAction func tryAgainButtonPressed(_ sender: UIButton) {
        hideBanner?()
    }

    open override func awakeFromNib() {

    }

}

我试过这个,但它不起作用,因为 UIView 没有 present 方法。

最佳答案

首先使用这个获取顶级 ViewController。然后你可以展示你的 viewController

if var topController = UIApplication.sharedApplication().keyWindow?.rootViewController {
    while let presentedViewController = topController.presentedViewController {
        topController = presentedViewController
    }

    // topController now can use for present.
    let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let newViewController = storyBoard.instantiateViewController(withIdentifier: "newViewController") as! NewViewController
    topController.present(newViewController, animated: true, completion: nil)
}

关于ios - 如何以编程方式从 UIVIew 呈现 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50209128/

相关文章:

ios - 在 Firestore 中保存 CLLocationCooridnate2D 数组

uiviewcontroller - 我可以将两个 xib 与一个 View Controller 一起使用 - 回复 : porting to iPhone 5

ios - 尝试创建类的实例时使用未解析的标识符错误

iphone - 核心图 - 防止缩放/缩放图以显示完整的轴范围

ios - 在 tableview 单元格上执行 segue 时出现问题

swift - 带有自定义部分标题的静态 UITableView?

swift - 仅当 View Controller 通过滑动或后退按钮按下而不是通过切换选项卡从堆栈中弹出时才发送数据

javascript - iOS Safari 一触后按顺序播放声音

ios - FCM推送通知“内容”条目

swift - 使用 Swift 的 for 循环中的两个变量