2015-01-10 5 views
0

В зависимости от действия пользователя мне нужно переместить пользователя от одного view controller к другому в зависимости от того, завершают ли задание по времени или выполняют задачу, нажав кнопку. Оба метода используют один и тот же метод. completeSession()Программное перемещение пользователя между контроллерами представлений в Swift

Я зашел в раскадровку и добавил идентификатор раскадровки для каждого экрана, который совпадает с классом контроллера вида. Поэтому на этот вопрос, class JournalViewController имеет раскадровки идентификатор JournalViewController, то же самое с SecondViewController

func completeSession() -> Void { 
    ... some other stuff, unrelated ... 

    let journalViewController = self.storyboard?.instantiateViewControllerWithIdentifier("JournalViewController") as ViewController 
    self.presentViewController(journalViewController, animated: true, completion: nil) 
} 

Это не работает и вызывает мое приложение к сбою с reason: Storyboard <UIStoryboard> doesn't contain a view controller with identifier JournalViewController, но JournalViewController.swift содержит:

class JournalViewController: UIViewController, UITextView Delegate {

Любая идея, как нажимать от SecondViewController до JournalViewController без ошибок?

+1

Идентификаторы раскадровки не являются именами классов. У вас есть контроллер представления, выложенный в вашем раскадровке, который имеет пользовательский класс 'JournalViewController'? Если это так, используйте идентификатор раскадровки этого контроллера. –

+0

Класс, когда я открываю правую панель и перехожу к инспектору идентификации, говорит, что класс JournalViewController –

+0

Простите мое невежество, хотел бы, чтобы вы помогли мне понять, какая разница между идентификаторами раскадровки и именами классов контроллеров представления в их соответствующих. быстрые файлы, разве это не одно и то же? –

ответ

0

Я думаю, что вы, вероятно, можете проверить почту здесь: What is a StoryBoard ID and how can i use this?

Таким образом, вы должны понять, как вы можете подключить ваш код с графикой. Перед Раскадровка выходит, мы используем NSBundle для загрузки графики. Итак, то же самое, вот как вы собираетесь загружать свою графику. Потому что Раскадровка не просто просто содержит один экран. Таким образом, у вас будет возможность идентифицировать их. Вот почему нам это нужно.

+0

Хорошо, понял. Поэтому я пошел дальше и сделал это. На каждом экране есть идентификатор раскадровки, имя которого совпадает с именем соответствующего класса контроллера. Я обновлю исходный вопрос, чтобы можно было ответить на этот вопрос. –

+1

На самом деле вам не нужно давать всем экранам имя. Вам нужно только указать им имя, если вам необходимо создать экземпляр, используя ** UIStoryboard ** –

0

Чтобы ответить на мой вопрос, этот код работал, пропавший кусок собирался в Раскадровки и давал каждому элементу идентификатор раскадровки.

instantiateViewControllerWithIdentifier полагается на свой идентификатор раскадровки, чтобы захватить его успешно, чтобы приложение узнало, куда нажать.

Я надеюсь, что это поможет.

let journalViewController = self.storyboard?.instantiateViewControllerWithIdentifier("JournalViewController") as JournalViewController 
self.presentViewController(journalViewController, animated: true, completion: nil) 
Смежные вопросы