我很难找到这个问题的答案。
我有一个 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/