2016-11-02 2 views
-1

Я пытаюсь сделать переход произойдет подобным образом к этому:Как сделать segue в viewDidLoad()?

viedDidLoad(){ 
    if 0==0 { 
     *segue happens* 
    } 
} 

, но все рекомендации, которые я вижу, очень старые и не использовать performSegueWithIdentifier, который больше не работает. Если это полезная информация, я также использую панель навигации, однако ей не нужно работать с этим ViewController, так как ViewController должен только изменять представления, если пользователь нажимает кнопку (т. Е. Принимает &).

+1

Вы понимаете, что 'viewDidLoad' делает? Почему вы хотите, чтобы там был segue? – JAL

+2

«который больше не работает» =! True – Alladinian

+0

@JAL, это не первое, что загружается? Извините, если это вопрос новичков, новый для iOS. Где бы вы предложили, я сказал? –

ответ

1

Вы должны выполнить свой segue в viewDidAppear вместо viewDidLoad, поскольку viewDidLoad вызывается, когда объект ViewController создан и он еще не прикреплен к окну.

+0

Даже при попытке использовать этот параметр 'performSegue (withIdentifier: String, sender: Any?)' Является единственным. Просто дал ему выстрел, и он все еще не работает. –

+0

Да, это единственный вариант для segue, но другим решением было бы создать новый viewController 'let storyboard = UIStoryboard (имя:« Main », bundle: nil) let controller = раскадровка.instantiateViewControllerWithIdentifier ("yourStoryBoardId") 'и использовать' presentViewController: 'внутри' viewDidAppear' или вы можете заменить свое 'window !.rootViewController' в вашей' viewDidLoad', но это было бы не лучшим решением. – livenplay

0

Как упомянуто @livenplay, вы не должны переходить от viewDidLoad.

Я бы пошел еще дальше и рекомендовал, чтобы вы вообще не перешли, и вместо этого создайте экземпляр своего контроллера просмотра из кода, а затем нажмите/представьте его вручную.

Это даст вам следующие преимущества:

  1. Вы не использовать подход, идентификатор, который очень склонен к опечатке-х
  2. Вы можете создать метод пользовательского инициализатора для этого вида контроллера и передать в различном если необходимо.
  3. Вы можете повторно использовать этот метод инициализации в другом месте вместо воссоздания segue в раскадровке для другого варианта использования.

Некоторые примеры кода, что демо-бы то, что я имею в виду:

class MyViewController: UIViewController { 
    static func initialize(with someArgument: Any) -> MyViewController { 
     let myVC = UIStoryboard(name: "main", bundle: nil).instantiateViewController(withIdentifier: "MyVCIdentifier") as? MyViewController 
     // do something here with the passed argument 

     return myVC! // force unwrapping for brevity... don't do this in your code :) 
    } 
} 

class StartingViewController: UIViewController { 
    override func viewDidLoad() { 
     let myVC = MyViewController.initialize(with: "someArgument") 

     // I propose that this... 
     self.navigationController?.pushViewController(myVC, animated: true) 
     self.present(myVC, animated: true, completion: nil) 

     //... is much better and more re-usable than this.. 
     self.performSegue(withIdentifier: "MyVCSegueIdentifier", sender: self) 
    } 
} 
+0

Не могли бы вы продемонстрировать это? Я новичок в iOS. –

+0

@ J.Doe добавил демо-код. Я, вероятно, забыл упомянуть о том, что для передачи аргумента с помощью segue вам придется поймать его в методе делегата, затем извлечь этот контроллер представления, затем набрать команду cast, а затем назначить аргумент. Что я думаю, что это просто огромная проблема –

+0

Что делать, если я не хочу передавать какие-либо аргументы? Когда я удаляю аргумент 'with:', я получаю ошибки. –

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

  • Нет связанных вопросов^_^