1

我正在学习如何使用情节提要处理视图控制器层次结构。我有 2 个 ViewController:cwViewController 类型的根(我理解的是下面的“self”)和 WorkspaceViewController 类型的第二个。我收到“在演示过程中尝试演示!” 由于此代码。

- (IBAction)nextView {
    WorkspaceViewController *workspace = [[WorkspaceViewController alloc] initWithNibName:nil bundle:nil];
    [self presentViewController:workspace animated:YES completion:NULL]; }

如何正确呈现视图控制器的答案?是可以应用但不太适合这种情况的最接近的答案,因为我没有在 VC 之间来回切换,我只是展示一个,然后将其关闭以显示原件。

然后,我尝试在呈现第二个之前关闭当前的,正如一些答案所建议的那样,如下所示:

[self dismissViewControllerAnimated:NO completion:nil];
[self presentViewController:workspace animated:YES completion:NULL];

但这只是给我一个额外的警告:在演示或关闭正在进行时尝试从视图控制器中关闭!

做一些其他的研究,我发现类似的问题是通过添加一个块来解决的

[self dismissViewControllerAnimated:YES...]

但这在这里没有帮助,因为我的警告发生在我调用该解除方法之前。任何有关如何处理视图的顺序和层次结构的进一步知识都会有很大帮助。非常感谢。

4

3 回答 3

2
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

 // TODO: make this all threaded?
 // crop the image to the bounds provided
 img = [info objectForKey:UIImagePickerControllerOriginalImage];
 NSLog(@"orig image size: %@", [[NSValue valueWithCGSize:img.size] description]);

 // save the image, only if it's a newly taken image:
 if ([picker sourceType] == UIImagePickerControllerSourceTypeCamera) {
     UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil);
 }

 // self.image_View.image = img;
 // self.image_View.contentMode = UIViewContentModeScaleAspectFit;

NSLog(@"Picker has returned");
[self dismissViewControllerAnimated:YES
                         completion:^{
                            ModalViewController *sampleView = [[ModalViewController alloc] init];
                            [self presentModalViewController:sampleView animated:YES];
                         }];
}
于 2014-05-15T07:25:43.267 回答
2

您是否创建了从按钮到 WorkSpaceViewController 的转场?如果是这样,您可能会尝试两次显示 WorkSpaceView - 一次是在选择按钮时,一次是从 cwViewController 中。要消除错误,请删除按钮中的 segue 到 WorkSpaceViewController,然后重新创建 segue - 这次是在 cwViewController 和 WorkSpaceViewController 之间。那应该照顾它。

于 2013-07-27T06:22:09.140 回答
0

尝试

[self presentModalViewController:workspace animated:YES];
if (![[self modalViewController] isBeingPresented]) {
      [self dismissModalViewControllerAnimated:YES];
}
于 2013-04-28T05:06:58.847 回答