2015-03-05 2 views
0

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

Я попытался сделать так, как показано ниже, но второй вид не отображается.

My Storyboard. Слева - это начальное представление, справа - представление, которое мне нравится открывать из исходного вида. На экране правильный вид щелкнул, так что вы можете увидеть свойства на правой:

enter image description here

Мой начальный класс UIViewController:

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad(); 
     dosomestuff(); 

     showTimeline(); // << -------------------- 
    } 


func showTimeline() { 

    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let vc = storyboard.instantiateViewControllerWithIdentifier("Timeline") as! UIViewController 
    self.presentViewController(vc, animated: true, completion: nil) 
    //self.showViewController(vc, sender: self); 

} 

Вопрос обновления, потому что непонятно, что я спрашивая: Когда я запускаю приложение, появляется только первый экран. Без сбоев просто предупреждение в журнале «Предупреждение: попытка представить, чей взгляд не в иерархии окон!»

любая помощь, как это сделать?

+0

Так что точная Вы сталкиваетесь с проблемой? Он падает? Он ничего не показывает? Пожалуйста, укажите свой вопрос. –

+0

Проверьте два ответа здесь http://stackoverflow.com/questions/24099533/swift-presentviewcontroller – Sawsan

ответ

0

Как Вайн описано, вы должны изменить свой rootController так:

func showTimeline() { 

    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let vc = storyboard.instantiateViewControllerWithIdentifier("Timeline") as! UIViewController 
    UIApplication.sharedApplication().keyWindow.rootViewController = vc; 
} 

Или добавьте showTimeline() в ViewDidAppear:

override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 
     showTimeline(); 
    } 

думаю, он должен работает;)

+0

Большое спасибо за помощь. Думаю, у вас обоих есть правильное решение. Теперь я застрял с практикой.Я получаю сообщение об ошибке. Метод не переопределяет какой-либо метод из его суперкласса, когда я добавляю «переопределить func viewDidAppear() {» на мой «ViewController». Он находится на том же уровне, что и мой «переопределить func viewDidLoad() {». Я использую Xcode 6.3. Любая помощь ? –

+0

Посмотрите мое обновление, оно должно работать сейчас;) Я забыл args – thedjnivek

+0

Большое спасибо за помощь. Теперь он работает, и я многому научился с помощью viewcontrollers. Я принимаю ваш ответ. –

0

Вы не должны представлять контроллеры представления в viewDidLoad. Правильное место для представления нового контроллера просмотра - после представления текущего.

Try вызов showTimeLine() из viewDidAppear()

2

Когда вид сделал нагрузки называется ваш контроллер представления не является фактически частью вида иерарха (и вообще не часть иерархии контроллера зрения) и поэтому не может представить другие виды. Вы должны были увидеть предупреждение журнала, когда вы его попробовали. Кроме того, какова точка первого вида, если она всегда представляет другое представление, почему бы просто не сделать второй вид корня ...

Итак, измените представление, изменив корневой контроллер или представив его после текущего корневого представления фактически отображается на экране.

+0

Относительно этого «что является точкой первого представления, если оно всегда представляет другое представление», возможно, он хочет дать пользователю возможность вернуться к нему, чтобы изменить возможность просмотра второго viewController, например whatsApp в функции «Добавление фотографий из библиотеки» – Sawsan

+0

Я не знаю, хорош ли мой дизайн экрана или нет. Я хотел бы иметь первое представление, которое инициирует все данные и загружает данные (может занять несколько минут и отображать фотографии и прогресс в процессе загрузки), а затем я хотел бы решить, какой вид должен быть представлен. @Wain: Ваше решение кажется правильным, потому что я получаю упомянутое предупреждение от вас. Знаю, что я очень новичок в IOS, и я не знаю, что означает, что «представление после текущего корневого представления фактически отображается на экране»? –

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