如何使用popViewController进行导航

时间:2013-12-06 21:08:38

标签: ios objective-c uiviewcontroller

我是iOS开发的新手,我使用parse.com作为我的后端。 我想从 [查看控制器2] 导航到 [查看控制器3] 但是行不通。 这是代码  http://i.stack.imgur.com/t6zZg.jpg

NSString *username = [self.usernameField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

NSString *password = [self.passwordField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];


NSString *email = [self.emailField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

if ([username length] == 0 || [password length] == 0 || [email length] == 0){

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Oops!" message:@"Make sure you enter a username, password , and email address!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];

    [alertView show]; // This help to show your message successfully!
}
else {
    PFUser *newUser  = [PFUser user]; // This is a method to create new users

    newUser.username = username;

    newUser.password = password;

    newUser.email    = email;

    [newUser signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
        if (error) {
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Sorry!" message:[error.userInfo objectForKey:@"error"] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];

            [alertView show];

        }
        else {


  [self.navigationController popToViewController:_profilePhotoViewController animated:YES];


        }

    }];
}

}

2 个答案:

答案 0 :(得分:0)

根据您发布的图像,在显示VC2

之前,VC3不会显示也不会被推送到控制器

此方法popToViewController:animated:要求控制器显示在控制器堆栈之前和控制器堆栈中,以便将堆栈弹回到它

你可以通过pop到root来实现你想要的,然后推送你的视图

[self.navigationController popToRootViewControllerAnimated:NO];
[self.navigationController pushViewController:_profilePhotoViewController animated:YES];

确保在推送之前分配_profilePhotoViewController


<强>更新

在你的故事板中为你的VC3设置一个标识符,例如“VC3Identifier”

您可以执行此操作,如下图所示

  1. 选择您的控制器
  2. 显示实用程序
  3. 显示身份检查员
  4. 将'VC3Identifier'放入StoryBoard ID字段
  5. enter image description here

    然后您需要分配此控制器的新实例并将其添加到导航控制器

    YourController *vc3 = [self.storyboard instantiateViewControllerWithIdentifier:@"VC3Identifier"];
    [self.navigationController setViewControllers:@[vc3] animated:YES];
    

答案 1 :(得分:0)

好吧,好吧,我不完全确定您的代码是如何工作的,以及什么会触发View的更改,但是在您调用此代码的代码中:

  [self.navigationController popToViewController:_profilePhotoViewController animated:YES];

你需要处理什么(假设profilePhotoViewController是VC3)。

转到故事板并按住Ctrl键并从显示视图(您开始的VC)中拖动,最后到VC 3. VC 3应亮起蓝色。放手,你会看到一个下拉菜单。选择“推送”。这将为您创建一个过渡的segue。接下来你需要给它一个标识符,所以点击刚刚制作的segue并转到Attributes Inspector并在“ProfilePictureSegue”中输入“Identifier”字段,然后按enter键(或返回)。

然后转到包含您发布的代码的文件并替换

  [self.navigationController popToViewController:_profilePhotoViewController animated:YES];

使用:

[self performSegueWithIdentifier:@"ProfilePictureSegue"];

鲍勃是你的叔叔。跑吧。

修改 我再次看了你的照片,看起来你的VC3在错误的地方。创建从VC2到VC 3的segue,而不是从导航控制器到VC3。如上所述,在VC2 .m文件中调用segue,它将在。之间转换。

如果您需要更多explanations