2017-02-18 4 views
1

У меня труднее всего найти ответ для этого.как перейти к раскадровке viewcontroller с точки зрения xib с быстрым 3

У меня есть представление xib, которое находится в пределах прокрутки, которая находится внутри контроллера вида. В xib у меня есть кнопка с действием, и мне нужно перейти к контроллеру представления, который у меня есть в моей раскадровке. Я также хотел бы иметь возможность использовать пользовательский сегмент.

До сих пор я читал, что могу создать экземпляр viewcontroller из раскадровки, чтобы перейти к нему. Но тогда я не знаю, как представить этого контроллера.

спасибо за любую помощь ...

UPDATE:

это код, я использую для выполнения SEGUE.

В родительском ViewController:

static var referenceVC: UIViewController? 


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

    setupScrollView() 
} 

код в XIb просмотра файла

 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() 
+1

Segues обычно ограничиваются только использованием раскадровки. Вероятно, вам придется добавить свое представление (которое вы можете настроить весь класс представления для загрузки из низа) в каскад в некотором роде, а затем вы можете подключить его к нему. В противном случае они называются 'UIStoryboardSegue' по какой-то причине. – TheCodingArt

+0

Если вы используете пользовательский сегмент, который может быть выделен в коде, вам просто нужен VC для выполнения, на мой взгляд, что означает, что вы можете подняться на цепочку ответчиков, чтобы найти соответствующий VC для его выполнения. В общем, похоже, вы хотите, чтобы пользовательский переход и какие-то обратные вызовы делегатов. Нет абсолютно никаких оснований для того, чтобы сделать ваш код сложным, чтобы сохранить segue. – TheCodingArt

+0

Я только что заработал. моя самая большая проблема заключалась в том, чтобы получить ссылку на родительский контроллер представления, чтобы я мог вызвать segue. То, как я получил ссылку, немного взломан, я просто создал статическую ссылочную переменную в контроллере родительского представления, который я мог бы использовать в файле xib. Есть ли лучший способ получить ссылку? Я обновлю вопрос, чтобы показать свой код. – Discoveringmypath

ответ

3

Как отмечалось в комментариях, перетекает, как правило, ограничивается раскадровку использования, как указано в documentation. Вы можете реализовать пользовательский вид xib в раскадровке с помощью @IBDesignable, как и подходы, и вы просматриваете нагрузку с xib в файл/класс раскадровки. Таким образом, вы получаете преимущества обоих миров. В противном случае вы можете захотеть подойти к этому по-другому (например, delegates/target-action событий и т. Д.).

Вы также можете подняться на responder chain и позвонить в раздел, относящийся к VC, загруженному из раскадровки (не обязательно нужно привязывать к какому-либо конкретному действию) через получение ссылки на VC и вызов 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? 
    } 
} 
+0

Спасибо за ответ, я посмотрю на это. Это определенно просматривает мою голову прямо сейчас. Вы видите какие-то проблемы с тем, как я это сделал? Я отредактировал мой вопрос, чтобы включить код, который я использовал, чтобы заставить его работать. – Discoveringmypath

+0

Вы определенно не должны ссылаться на статическую переменную так, как вы должны ссылаться на родительский VC. Этот вопрос решается вышеуказанным кодом. – TheCodingArt

+0

В любом случае вы можете включить комментарии к своему коду, чтобы помочь мне лучше понять, что происходит? – Discoveringmypath

Смежные вопросы