Пользовательский переход после успешного входа в систему

Я новичок в программировании под iOS, так что не убивайте меня, пожалуйста :]. У меня есть приложение с авторизацией, и когда я успешно авторизуюсь, я хотел бы перейти ко второму просмотру. Когда авторизация не удалась, я показываю предупреждение. Мой код для авторизации:

- (IBAction)LoginClick:(id)sender {

    for(User *user in self.allUsers){
        if([user.userName isEqualToString:self.usernameTextField.text] && [user.password isEqualToString:self.passwordTextField.text]){
            // Logged in --> go to second view (TableView)
            [self performSegueWithIdentifier:@"LoginSegue" sender:self];
        }
        else{
            // Wrong password or username
            Alerts *alert = [Alerts new];
            [alert showAlert:LOGIN_ERROR];
        }
    }
}

Я пытался найти простой способ пользовательского перехода (перехода) во второй вид при успешном входе в систему, но не нашел. Теперь у меня есть эта раскадровка:

https://www.dropbox.com/s/dc8h4u920wgt47s/Screenshot%202014-03-03%2011.36.56.png

И код для перехода между View:

[self performSegueWithIdentifier:@"LoginSegue" sender:self];

В результате ошибка:

* Завершение работы приложения из-за неперехваченного исключения «NSGenericException», причина: «Не удалось найти контроллер навигации для перехода «LoginSegue». Переходы push можно использовать только в том случае, если исходный контроллер управляется экземпляром UINavigationController.'

В чем проблема? Зачем мне что-то вроде "Контроллер навигации". Мне нужно создать класс для перехода? Каков самый простой способ решить эту проблему? Спасибо.

РЕДАКТИРОВАТЬ ------- РЕШЕНИЕ

Спасибо всем за помощь. Я добавил навигационный контроллер в свое приложение в качестве начального вида. И я обнаружил, что использование пользовательского перехода и создания класса для этого пользовательского перехода не требуется. Самый простой способ решить мою проблему - подключить ViewControllers (НЕ BUTTON и второй ViewController, поэтому у меня это было в первый раз...) и назвать push-переход. Имя, которое я использовал здесь в коде:

- (IBAction)LoginClick:(id)sender {

    for(User *user in self.allUsers){
        if([user.userName isEqualToString:self.usernameTextField.text] && [user.password isEqualToString:self.passwordTextField.text]){
            // Logged in --> go to second view (TableView)
            [self performSegueWithIdentifier:@"LoginSegue" sender:self];
        }
        else{
            // Wrong password or username
            Alerts *alert = [Alerts new];
            [alert showAlert:LOGIN_ERROR];
        }
    }
}

Конкретно здесь: [самостоятельно выполнитьSegueWithIdentifier:@"LoginSegue" sender:self];

И все прекрасно работает. Когда я вхожу в систему с правильным паролем и именем пользователя, меня перенаправляют на второй вид.


person krata    schedule 03.03.2014    source источник
comment
Узнайте, что такое переход и как его использовать — raywenderlich.com/50310/storyboards-tutorial-in-ios-7-part-2   -  person ignotusverum    schedule 03.03.2014
comment
Не забудьте отметить лучший ответ и / или проголосовать за ответы, которые вам помогли. Другие, сталкивающиеся с той же проблемой, захотят узнать, что решило проблему, и те, кто отвечает на вопросы, заслуживают очков репутации. Если нет ответа на ваш вопрос. Прокомментируйте их, чтобы узнать подробности   -  person Simon McLoughlin    schedule 03.03.2014


Ответы (5)


Ошибка говорит вам, что вы не можете использовать этот тип перехода без использования навигационного контроллера.

Просто перетащите навигационный контроллер из правого меню и установите его как Initial Controller в разделе свойств справа. вот так:

введите здесь описание изображения

Затем подключите контроллер входа в систему как его root view controller. Тогда это сработает для вас.

Конечный результат должен выглядеть примерно так:

введите здесь описание изображения

person Simon McLoughlin    schedule 03.03.2014

Вы должны использовать переход Modal, если вы не используете переход UINavigationController вместо перехода Push.

person Zaphod    schedule 03.03.2014
comment
Исходя из требований пользователей, модальный переход не имеет особого смысла. После входа в систему отображать все приложение в виде модального окна? - person Simon McLoughlin; 03.03.2014
comment
Когда вы используете модальный переход на iPhone, и если вы не программируете переход отката, первый контроллер представления высвобождается и полностью забывается о замене новым. Таким образом, ваше приложение запускается в новом контроллере представления. Конечно, если вам нужно вернуться к экрану входа в систему, вы либо используете навигационный контроллер и нажимаете переходы, либо откатываете переход к этому контроллеру представления входа в систему, либо снова переходите к другому модальному переходу. Но, на мой взгляд, в этом методе нет недостатка в дизайне. - person Zaphod; 03.03.2014

Вы могли бы сделать две вещи, которые, по всей вероятности, вы не делаете. Контроллер навигации может отсутствовать, и он должен быть контроллером корневого представления. Добавить навигационный контроллер в проект на самом деле очень просто. Откройте раскадровку и выберите первый вид, затем перейдите к.

Редактор > Встроить > Контроллер навигации

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

NextViewController *nvc = [segue destinationViewController];

Чтобы понять, что делает контроллер навигации, перейдите по этой ссылке< /а>

person Community    schedule 03.03.2014

Чтобы использовать push-переход, ваш корневой контроллер представления должен быть контроллером навигации. Единственный переход, который вы можете использовать без такого «главного» контроллера, - это модальный переход.

person ignotusverum    schedule 03.03.2014

когда вы используете переходы, ваш firstViewController должен находиться под контроллером навигации. Если вы еще не встроили vc в контроллер навигации, щелкните VC в раскадровке, а поверх xcode нажмите

editor -> embed -> navigationController

введите здесь описание изображения

person Muhammad Adnan    schedule 03.03.2014