Использование сегментированного управления для продвижения контроллеров представления - PullRequest
0 голосов
/ 22 июня 2011

В настоящее время я делаю приложение для панели вкладок, где каждая вкладка имеет совершенно другое приложение.У меня возникают большие трудности с визуализацией того, как настроить одну из вкладок.

Я хочу сделать сегментированный элемент управления с двумя вариантами (я называю их Test House и Corner).Когда сегментированный элемент управления = 0, будет показан файл пера, представляющий тестовый дом (просто UIViewController), а когда сегментированный элемент управления = 1, будет загружен файл пера, представляющий Угол (также UIViewController).Я использую отдельный наконечник для Test House и угла, так как на каждом наконечнике будет много изображений, что делает его слишком загроможденным для кодирования только одного вида.

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

Мой метод viewDidLoad в классе с сегментированным элементом управления:

- (void)viewDidLoad {
    [super viewDidLoad];
    QSDTIntegratedAppAppDelegate *delegate = (QSDTIntegratedAppAppDelegate *)[[UIApplication sharedApplication] delegate];
    if (segmentedControl == 0) {
        [delegate.testHouseViewController pushViewController:interactiveTestHouseViewController animated:YES];
    }
    else {
        [delegate.testHouseViewController pushViewController:interactiveCornerViewController animated:YES];
    }   
}

Моя функция для чтения при изменении сегментированного элемента управления:

- (void) segmentAction:(id)sender{
self.segmentedControl = sender;
QSDTIntegratedAppAppDelegate *delegate = (QSDTIntegratedAppAppDelegate *)[[UIApplication sharedApplication] delegate];
if ([segmentedControl selectedSegmentIndex] == 1) {
    NSLog(@"TEST HOUSE CHOSEN!");
    [delegate.testHouseViewController popViewControllerAnimated:YES];
    [delegate.testHouseViewController pushViewController:interactiveTestHouseViewController animated:YES];
}
if ([segmentedControl selectedSegmentIndex] == 1) {
    NSLog(@"CORNER CHOSEN!");
    [delegate.testHouseViewController popViewControllerAnimated:YES];
    [delegate.testHouseViewController pushViewController:interactiveCornerViewController animated:YES];
}

}

TestHouseViewController = Контроллер для сегментированного элемента управления InteractiveTestHouseViewController = Элемент Test House.Выбор 1 в сегментированном элементе управления InteractiveCornerHouseViewController = Угловое перо.Вариант 2 в сегментированном элементе управления

Я также получаю следующее предупреждение 6 раз, оставляя меня в тупике: «TestHouseViewController» может не отвечать на «-pushViewController: animated:

Любая помощь приветствуется.

Ответы [ 3 ]

1 голос
/ 22 июня 2011

pushViewController должен использоваться с UINavigationController. Если вы пытаетесь представить контроллеры представления, используя UIViewController, вам нужно будет использовать presentModalViewController. В противном случае, если testHouseViewController является корневым контроллером представления UINavigationController, выполните что-то вроде этого:

[delegate.testHouseViewController.navigationController popViewControllerAnimated:YES];
[delegate.testHouseViewController.navigationController pushViewController:interactiveCornerViewController animated:YES];

Кроме того, в вашем методе segmentAction вы сравниваете сегмент с 1 в обоих операторах if. Вот исправление:

- (void) segmentAction:(id)sender{
self.segmentedControl = sender;
QSDTIntegratedAppAppDelegate *delegate = (QSDTIntegratedAppAppDelegate *)[[UIApplication sharedApplication] delegate];

if ([segmentedControl selectedSegmentIndex] == 0) {
    NSLog(@"TEST HOUSE CHOSEN!");
    [delegate.testHouseViewController.navigationController popViewControllerAnimated:YES];
    [delegate.testHouseViewController.navigationController  pushViewController:interactiveTestHouseViewController animated:YES];
}
if ([segmentedControl selectedSegmentIndex] == 1) {
    NSLog(@"CORNER CHOSEN!");
    [delegate.testHouseViewController.navigationController  popViewControllerAnimated:YES];
    [delegate.testHouseViewController.navigationController  pushViewController:interactiveCornerViewController animated:YES];
}
0 голосов
/ 12 апреля 2014

@ AlexP, как вы собираетесь это сделать: «Мой мыслительный процесс состоял в том, чтобы всегда отображалось сегментированное контрольное представление»?

0 голосов
/ 22 июня 2011

Попробуйте delegate.testHouseViewController.navigationController, чтобы нажать и хлопнуть.Кроме того, оба ваших оператора if во втором блоке кода спрашивают, имеет ли сегментированный элемент управления значение 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...