我有几个“ViewControllers”和一个用于更新 iOS 应用程序中的图片。第一个有一个按钮,点击时询问用户是否要使用图库照片或相机。现在我通过使用presentViewController
on来展示这个控制器self
。
但是当第二个视图控制器出现时,我想UIImagePicker
根据用户传入的内容来设置源。
我做了两种不同的方法。一个带有相机源,一个带有“照片库”。我不知道如何根据前一个控制器的使用选择来调用其中一种方法。我用这种方法走对了吗?还是我应该只有一个控制器?
我有几个“ViewControllers”和一个用于更新 iOS 应用程序中的图片。第一个有一个按钮,点击时询问用户是否要使用图库照片或相机。现在我通过使用presentViewController
on来展示这个控制器self
。
但是当第二个视图控制器出现时,我想UIImagePicker
根据用户传入的内容来设置源。
我做了两种不同的方法。一个带有相机源,一个带有“照片库”。我不知道如何根据前一个控制器的使用选择来调用其中一种方法。我用这种方法走对了吗?还是我应该只有一个控制器?
您可以使用inheritance
,使您以前的控制器超类,并调用 inpresentViewController
中的方法viewDidload
。
基本上有两种方法可以将数据传递给视图控制器。
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];
另外的方式访问它,就像sender
id 一样,您可以“滥用”它来传递任何对象,例如 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];