成功登录后自定义segue

时间:2014-03-03 10:46:49

标签: ios objective-c uinavigationcontroller authorization segue

我是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];
        }
    }
}

我尝试查看自定义转换(segue)到第二个视图的简单方法,当我成功登录时,但我没有找到。现在我有了这个故事板:

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

View之间转换的代码是:

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

结果是错误:

*由于未捕获的异常'NSGenericException'而终止应用,原因是:'无法找到segue的导航控制器'LoginSegue'。 Push segues只能在源控制器由UINavigationController实例管理时使用。

有什么问题?为什么我需要像“导航控制器”这样的东西。我需要为segue创建一个类吗?解决这个问题最简单的方法是什么?谢谢。

编辑-------解决方案

感谢所有人的帮助。我将导航控制器添加到我的应用程序作为初始视图我发现,使用自定义segue并为此自定义segue制作类是不必要的。解决我问题的最简单方法是连接ViewControllers(NOT BUTTON和第二个ViewController,所以我第一次使用它......)并命名push segue。我在代码中使用的名称:

- (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];
        }
    }
}

具体在这里:[self performSegueWithIdentifier:@“LoginSegue”sender:self];

一切都很棒。当我使用正确的密码和用户名登录时,我被重定向到第二个视图。

5 个答案:

答案 0 :(得分:1)

如果您不使用Modal而不是UINavigationController segue,则应使用Push segue。

答案 1 :(得分:1)

错误告诉您在不使用导航控制器的情况下无法使用该类型的转换。

只需从右侧菜单中拖放导航控制器,然后将其设置为右侧属性部分中的Initial Controller即可。像这样:

enter image description here

然后将您的登录控制器作为其root view controller连接。那么这对你有用。

最终结果应该类似于:

enter image description here

答案 2 :(得分:0)

你可以做两件事,你很可能没有这样做。可能缺少导航控制器,它需要是根视图控制器。将导航控制器添加到项目实际上非常容易。 打开故事板并选择第一个视图,然后转到。

  

编辑器>嵌入>导航控制器

如果这不起作用,您可以实例化下一个视图控制器的对象,并在准备segue方法中执行显式的segue。

NextViewController *nvc = [segue destinationViewController];

要了解导航控制器按照此link

执行的操作

答案 3 :(得分:0)

为了使用push segue,您的根视图控制器需要是导航控制器。没有像这样的“主”控制器可以使用的唯一segue是模态segue

答案 4 :(得分:0)

当你使用segues时,你的firstViewController应该在Navigation控制器下。如果您尚未在导航控制器中嵌入vc,则单击故事板中的VC并在xcode上单击

editor -> embed -> navigationController

enter image description here