我最难找到答案。
我有一个xib视图,位于视图控制器内的scrollview中。在xib中我有一个带动作的按钮,我需要转到我在故事板中的视图控制器。我也希望能够使用自定义的segue。
到目前为止,我已经读过我可以从故事板中实例化viewcontroller来实现它。但后来我不知道如何呈现该控制器。
感谢您的帮助...
更新:
这是我用来执行segue的代码。
在父ViewController中:
static var referenceVC: UIViewController?
override func viewDidLoad() {
super.viewDidLoad()
print("viewdidload")
LevelSelectViewController.referenceVC = self
setupScrollView()
}
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()
答案 0 :(得分:3)
如评论中所述,Segues通常仅限于使用documentation中所述的故事板使用情况。您可以通过@IBDesignable
类似方法在故事板中实现自定义xib视图,并让您从xib加载到storyboard文件/类中。这样,您就可以获得两个世界的好处。否则,您可能希望以另一种方式处理此问题(例如delegates / target-action事件等)。
您也可以爬上responder chain并通过获取对VC的引用来调用与故事板中加载的VC相关的segue(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?
}
}