Изменение viewController при нажатии кнопки


Я новичок в программировании iPhone. то, что я пытаюсь, это у меня есть один экран с кнопкой. И я хочу изменить контроллер вида не только вид, когда я нажимаю эту кнопку (Я знаю, как добавить подвиды), потому что из этого 2-го контроллера вида я должен перейти к третьему виду, что невозможно, если я добавлю подвиды в первую очередь. Может кто-нибудь помочь мне с этим? Возможно ли это? и если да, то как? Все виды и контроллер вида создаются программно. Я не использую IB.

EDIT: вот соответствующий код, который срабатывает при нажатии кнопки

-(id)showCurrentLoc:(id)sender { 
 locationController = [currentLocController alloc]; 
 [entry removeFromSuperview]; 
 [newLoc removeFromSuperview]; 
 [currentLoc removeFromSuperview]; 
 [self.view setBackgroundColor:[UIColor clearColor]]; //[self.view addSubview: [locationController view]]; 
 [self.navigationController pushViewController:locationController animated:YES];  [locationController release]; 
 return 0; 
} //Location Controller is the tableViewController

Спасибо Vik

5 2

5 ответов:

Обычно вы используете навигационный контроллер для такого рода вещей, чтобы пользователь мог легко вернуться к предыдущему виду. Ваш контроллер вида будет делать что-то вроде этого:

[self.navigationController pushViewController:someNewViewController animated:YES];

Если вы хотите управлять контроллерами вида самостоятельно, вы всегда можете просто изменить свойство окна rootViewController. Пожалуйста, прочитайтеруководство по программированию контроллера вида для получения полной картины.

Вы можете сделать что-то вроде этого

        YourViewController *objYourViewController = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil];
        [self.navigationController pushViewController:objYourViewController animated:YES];
        [YourViewController release];

UINavigationController - это то, что вам нужно. Он управляет стеком UIViewControllers, и если вы хотите добавить новый UIViewController, просто вставьте его в этот стек навигации. Это автоматизирует поведение кнопки Назад для вас, и вы можете вытащить текущий UIViewController из стека, когда вы закончите с ним.

Вы можете работать с UINavigationController. Добавление вашего первого UIViewController, как это в методе init:

        [self setViewControllers:[NSArray arrayWithObject:viewController]];

А затем, когда кнопка нажата или выбор сделан, ваш толчок второй несколько контроллер с (в первом viewController):

[self.navigationController pushViewController:controller animated:YES]; 

Таким образом, вы также получите автоматическую кнопку (Назад). В основном вы создаете стек UIViewControllers, который можно нажимать и нажимать, как с обычным стеком.

Надеюсь, это поможет. Загляните в следующий: Ссылка На Класс UINavigationController

- (void) loadViewAtIndex:(NSInteger)index {

    [self unloadViewAtIndex:activeViewIndex];

    switch (index) {

        case 1:
        {
            if (viewController1 == nil)
            {
                viewController1 = [[ViewController1 alloc] initWithNibName:@"ViewController1" bundle:nil];
            }

            viewController1.view.frame = CGRectMake(0.0, 0.0, viewController1.view.frame.size.width, viewController1.view.frame.size.height);

            [window addSubview:viewController1.view];
        }
            break;

        case 2:
        {
            if (viewController2 == nil)
            {
                viewController2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil];
            }

            viewController2.view.frame = CGRectMake(0.0, 0.0, viewController2.view.frame.size.width, viewController2.view.frame.size.height);

            [window addSubview:viewController2.view];
        }
            break;

        default:
            break;
    }

    activeViewIndex = index;
}

- (void) unloadViewAtIndex:(NSInteger)index {
    switch (index) {

        case 1:
        {
            if (viewController1 != nil)
            {
                [viewController1.view removeFromSuperview];
                [viewController1 release];
                viewController1 = nil;
            }
        }
            break;

        case 2:
        {
            if (viewController2 != nil)
            {
                [viewController2.view removeFromSuperview];
                [viewController2 release];
                viewController2 = nil;
            }
        }
            break;

        default:
            break;
    }
}