0

我有几个“ViewControllers”和一个用于更新 iOS 应用程序中的图片。第一个有一个按钮,点击时询问用户是否要使用图库照片或相机。现在我通过使用presentViewControlleron来展示这个控制器self

但是当第二个视图控制器出现时,我想UIImagePicker根据用户传入的内容来设置源。

我做了两种不同的方法。一个带有相机源,一个带有“照片库”。我不知道如何根据前一个控制器的使用选择来调用其中一种方法。我用这种方法走对了吗?还是我应该只有一个控制器?

4

2 回答 2

0

您可以使用inheritance,使您以前的控制器超类,并调用 inpresentViewController中的方法viewDidload

于 2014-05-15T08:42:36.197 回答
0

基本上有两种方法可以将数据传递给视图控制器。


Storyboard
如果您正在使用 Storyboard segues(即控制从“根”视图控制器到目标视图控制器的拖动,选择过渡样式并定义标识符),您可以通过以下方式呈现视图控制器

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

大多数情况下,您的目标视图控制器将是一个自定义类,因此请定义一个公共属性来保存您想要传递的数据。然后在您的“根”视图控制器中实现以下内容

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Setup the location menu delegate
    if([segue.identifier isEqualToString:@"yourSegueIdentifier"]) {
        // The custom class of your destination view controller,
        // don't forget to import the corresponding header
        ViewControllerCustomClass *vc = segue.destinationViewController;
        // Set custom property
        vc.chosenImageId = self.chosenImageId;
        // Send message
        [vc message];
   }
}

提示:
如果您的目标视图控制器是 navigationViewController 的根视图控制器,您可以通过[[segue.destinationViewController childViewControllers] objectAtIndex:0];另外的方式访问它,就像senderid 一样,您可以“滥用”它来传递任何对象,例如 NSDictionary。
另请注意,当我指的是根视图控制器时,我指的是我们从其连接到目的地的视图控制器。


以编程方式

ViewControllerCustomClass *vc = [[ViewControllerCustomClass alloc] init];
vc.chosenImageId = self.chosenImageId;

// If you want to push it to the navigation controller
[self.navigationController pushViewController:vc animated:YES];

// If you want to open it modally
[self presentViewController:vc animated:YES completion:nil];
于 2014-05-15T08:52:09.687 回答