swift - 如何使用 swift 3 从 xib View 切换到 Storyboard View Controller

标签 swift storyboard segue xib

我很难找到这个问题的答案。

我有一个 xib View ,它位于 View Controller 内的 ScrollView 中。在 xib 中,我有一个带 Action 的按钮,我需要转到 Storyboard中的 View Controller 。我还希望能够使用自定义转场。

到目前为止,我已经了解到我可以从 Storyboard 中实例化 viewcontroller 以继续它。但后来我不知道如何展示该 Controller 。

感谢任何帮助...

更新:

这是我用来执行转场的代码。

在父 ViewController 中:

    static var referenceVC: UIViewController?


override func viewDidLoad() {
    super.viewDidLoad()
    print("viewdidload")
    LevelSelectViewController.referenceVC = self

    setupScrollView()
}

xib View 文件中的代码

        let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "sightWordController")

        let parent = LevelSelectViewController.referenceVC!

        let segue = InFromRightCustomSegue(identifier: "test", source: parent, destination: vc)


        segue.perform()

最佳答案

如评论中所述,Segues 通常仅限于 Storyboard使用,如 documentation 中所述.您可以通过 @IBDesignable 之类的方法在 Storyboard 中实现自定义 xib View ,并让您查看从 xib 加载到 Storyboard 文件/类中。这样,您将获得两全其美的好处。否则,您可能希望以另一种方式处理此问题(例如 delegates/target-action 事件等)。

您也可以爬上responder chain并通过获取对 VC 的引用并调用 segue 来调用与从 Storyboard加载的 VC 相关的 segue(segue 不一定必须附加到任何特定操作)。您可以通过以下示例代码的方式攀登响应者链:

protocol ChildViewControllerContainer {
    var parentViewController: UIViewController? { get }
}


protocol ViewControllerTraversable {
    func viewController<T: UIViewController>() -> T?
}

extension UIView: ViewControllerTraversable {

    func viewController<T: UIViewController>() -> T? {
        var responder = next

        while let currentResponder = responder {
            guard responder is T else {
                responder = currentResponder.next
                continue
            }

            break
        }

        return responder as? T
    }
}

extension UITableViewCell: ChildViewControllerContainer {
    weak var parentViewController: UIViewController? {
        return viewController() as UIViewController?
    }
}

关于swift - 如何使用 swift 3 从 xib View 切换到 Storyboard View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42321843/

相关文章:

ios - 终止应用程序,原因 : 'Storyboard () doesn' t contain a view controller with identifier 'listview'

ios - 展开两个 segue

iOS Swift - 准备 segue 后属性未更新

swift - 如何从 firebase 身份验证中获取用户 ID

ios - 根据 View 设置按钮一侧的角半径?

swift - 为 OpenWhisk/Kitura Swift HTTP POST 请求发送表单数据/应用程序/x-www-form-urlencoded 正文

iOS : passing data between viewController (destination embedded in a NavigationController)

ios - 在容器 View ( Storyboard)内推送透明背景 UIViewController 时的灰色背景

swift - 使用 segue 打开其他 View 只能通过按下按钮来实现

swift - 更改部分索引背景颜色