Я нашел много уроков по переключению представлений на iPhone, но ни одного, которые бы полностью соответствовали моим потребностям. Интересно, можете ли вы помочь.
Мне нужен начальный вид, A и нажмите кнопку, выгрузите A и переключитесь в режим просмотра B.
Я видел следующее, но у меня есть причины, почему я не хочу делать это таким образом:
Использование контроллера навигации - после того, как представление А будет удалено, мне не нужно возвращаться к нему, поэтому оно должно полностью исчезнуть и быть освобожденным из памяти.
Использование контроллера панели вкладок - та же причина, что и выше. Я бы хотел линейно перейти от А к В, а не от В к А - никогда.
Использование модального вида - на самом деле, по той же причине. Кроме того, это выглядит как UI no-no, поскольку у пользователя создается впечатление, что он возвращается к просмотру A после завершения действия в B.
Пожалуйста, помогите мне, единственное, с чем я действительно борюсь, это как выгрузить оригинальный контроллер представления, созданный как часть приложения. Я думаю, чтобы показать другое представление, все, что мне нужно сделать, это инициализировать и выделить его в представлении А, а затем добавить его в качестве подпредставления. Тем не менее, выгрузка представления A из viewcontroller A действительно сбивает меня с толку.
Редактировать: По совету кого-то из нижеприведенных мною реализовано переключение видов, но по какой-то причине removeFromSuperview не работает в представлении A после отображения представления B. По сути, я все еще могу видеть вид A за видом B (я сделал вид b немного меньше, чтобы я мог проверить это).
Вот мой делегат приложения:
@implementation View_SwitchAppDelegate
@synthesize window;
@synthesize switchViewController;
@synthesize secondViewController;
@synthesize firstViewController;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Override point for customization after application launch
FirstViewController *aFirstView = [[FirstViewController alloc] initWithNibName:@"FirstView" bundle:nil];
[self setFirstViewController:aFirstView];
[aFirstView release];
[window addSubview:firstViewController.view];
[window makeKeyAndVisible];
}
- (void)dealloc {
[window release];
[switchViewController release];
[super dealloc];
}
- (void)switchToTwo {
SecondViewController *aSecondView = [[SecondViewController alloc] initWithNibName:@"SecondView" bundle:nil];
[self setSecondViewController:aSecondView];
[aSecondView release];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:window cache:YES];
[firstViewController.view removeFromSuperview];
[firstViewController release];
firstViewController = nil;
[self.window addSubview:[secondViewController view]];
[window makeKeyAndVisible];
[UIView commitAnimations];
}
@end
Вот мой FirstViewController (вы увидите, что, когда средство выбора камеры возвращает изображение, я пытаюсь переключить представления, вызывая метод делегата приложения:
#import "FirstViewController.h"
#import "View_SwitchAppDelegate.h"
#import "SecondViewController.h"
@implementation FirstViewController
- (IBAction) takeButtonPressed
{
NSString *type = @"Camera";
[self callCameraWithType:type];
}
- (IBAction) chooseButtonPressed
{
NSString *type = @"Library";
[self callCameraWithType:type];
}
-(void) callCameraWithType:(NSString *)type {
// Set up the image picker controller and add it to the view
imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.delegate = self;
if ([type isEqual:@"Camera"])
{
NSLog(@"Camera");
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
imagePickerController.sourceType =
UIImagePickerControllerSourceTypeCamera;
}
else {
imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
}
}
else
{
NSLog(@"Library");
imagePickerController.sourceType =
UIImagePickerControllerSourceTypePhotoLibrary;
}
[self presentModalViewController:imagePickerController animated:YES];
}
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info {
[picker dismissModalViewControllerAnimated:YES];
//get app delegate
View_SwitchAppDelegate *appDelegate = (View_SwitchAppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate switchToTwo];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
// Dismiss the image selection and close the program
[picker dismissModalViewControllerAnimated:YES];
}
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
NSLog(@"View loaded");
[super viewDidLoad];
}
- (void)removeSelf{
[self.view removeFromSuperview];
}
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
NSLog(@"First Unload");
}
- (void)dealloc {
NSLog(@"First Dealloc");
[super dealloc];
}
@end