Я понятия не имею, на что похож рабочий процесс вашего приложения, но если вам нужно отобразить новый вид после того, как выбрано изображение, вам, вероятно, следует сделать это либо путем добавления нового контроллера представления на контроллер навигации, либо путем представления это как модальный вид.
Это позволяет вам легко вернуться к предыдущему экрану, где вас попросили выбрать фотографию.
Допустим, что для вашего приложения вы решили использовать UINavigationController
.
Вы бы инициализировали контроллер навигации с вашим первым контроллером представления в качестве корневого контроллера представления.
Тогда в вашем методе делегата UIImagePicker вы получите что-то вроде этого:
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
// Initialize your new view controller
CustomViewController *controller = [[CustomViewController alloc] initWithNibName:@"SecondView" bundle:nil];
// Pass your custom view controller the image you just selected
controller.valueToPass = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
[self.navigationController pushViewController:controller animated:YES];
[controller release];
}
Вы создаете подкласс UIViewController
с именем CustomViewController и передаете ему значения, создавая свойства, которые вы можете назначить (например, valueToPass в моем примере).
EDIT:
Можно просто переключить видимый вид контроллера вида. Это так же просто, как изменить значение self.view
. Вы можете поместить два UIViews в один файл XIB и поместить IBOutlets для обоих в ваш контроллер. Вы могли бы иметь заголовок, который выглядит так:
@interface MyController : UIViewController {
IBOutlet UIView *view1;
IBOutlet UIView *view2;
}
// Follow this with properties for all of those IBOutlets as well
Тогда в коде вашего контроллера:
- (IBAction)switchViews {
if ([self.view isEqualTo:view1]) {
self.view = view2;
} else {
self.view = view1;
}
}
Это работает, но, насколько я знаю, не разрешает переходы. Вместо этого вы можете сделать это:
- (IBAction)switchViews:(id)sender {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:NO];
if ([[secondaryView superview] isEqual:mainView]) {
[secondaryView removeFromSuperview];
} else {
[self.view addSubview:secondaryView];
}
[UIView commitAnimations];
}
Обе эти опции работают и позволяют вам использовать один и тот же контроллер вида для управления обоими видами. Однако, если представления выполняют разные задачи, они должны быть связаны с разными контроллерами. Использование разных контроллеров аналогично, если вы устанавливаете контроллер как свойство в своем заголовке:
- (IBAction)switchViews:(id)sender {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:NO];
if (self.secondaryController) {
[self.secondaryController.view removeFromSuperview];
self.secondaryController = nil;
} else {
self.secondaryController = [[SecondaryController alloc] initWithNibName:@"SecondView" bundle:nil];
self.secondaryController.valueToPass = @"I am passing this value!";
[self.view addSubview:self.secondaryController.view];
}
[UIView commitAnimations];
}