Skip to content

Commit ac46bfd

Browse files
committed
Parse <scene> from storyboard instead of <viewController>
1 parent 1e2bd9e commit ac46bfd

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

R.swift/ResourceTypes/Storyboard.swift

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ private class StoryboardParserDelegate: NSObject, NSXMLParserDelegate {
119119
var reusables: [Reusable] = []
120120

121121
// State
122-
var currentViewController: (String, Storyboard.ViewController)?
122+
var currentViewController: Storyboard.ViewController?
123123

124124
@objc func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
125125
switch elementName {
@@ -145,7 +145,7 @@ private class StoryboardParserDelegate: NSObject, NSXMLParserDelegate {
145145
let type = customType ?? Type._UIStoryboardSegue
146146

147147
let segue = Storyboard.Segue(identifier: segueIdentifier, type: type, destination: destination, kind: kind)
148-
currentViewController?.1.addSegue(segue)
148+
currentViewController?.addSegue(segue)
149149
}
150150

151151
case "image":
@@ -166,7 +166,7 @@ private class StoryboardParserDelegate: NSObject, NSXMLParserDelegate {
166166

167167
default:
168168
if let viewController = viewControllerFromAttributes(attributeDict, elementName: elementName) {
169-
currentViewController = (elementName, viewController)
169+
currentViewController = viewController
170170
}
171171

172172
if let reusable = reusableFromAttributes(attributeDict, elementName: elementName) {
@@ -176,9 +176,20 @@ private class StoryboardParserDelegate: NSObject, NSXMLParserDelegate {
176176
}
177177

178178
@objc func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
179-
if let currentViewController = currentViewController where elementName == currentViewController.0 {
180-
viewControllers.append(currentViewController.1)
181-
self.currentViewController = nil
179+
180+
// We keep the current view controller open to collect segues until the closing scene:
181+
// <scene>
182+
// <viewController>
183+
// ...
184+
// <segue />
185+
// </viewController>
186+
// <segue />
187+
// </scene>
188+
if elementName == "scene" {
189+
if let currentViewController = currentViewController {
190+
viewControllers.append(currentViewController)
191+
self.currentViewController = nil
192+
}
182193
}
183194
}
184195

0 commit comments

Comments
 (0)