Два UIViews для одного ViewController - PullRequest
0 голосов
/ 08 ноября 2011

Я не уверен, как это сделать.Поэтому у меня изначально был ViewController с одним .xib и одним основным видом.Я представляю это так:

DogViewController *dvc = [[DogViewController alloc] initWithNibName:@"DogViewController" bundle:nil];
dvc.modalPresentationStyle = UIModalPresentationFormSheet;
dvc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:dvc animated:YES];
[dvc release];

Так что это прекрасно работает.Однако теперь, нажав кнопку в DogViewController.xib, я хочу закрыть текущий лист формы и показать другой лист формы с некоторыми дополнительными вопросами, прежде чем продолжить.Поэтому я начал с добавления другого представления в исходный файл .xib из DogViewController, затем застрял в логике того, как отменить первое и показать второе.Я предполагаю, что мне нужен выход к новому представлению в том же .xib, но оттуда я потерян.Спасибо.

Ответы [ 4 ]

0 голосов
/ 08 ноября 2011

Очень простое решение - хранить ссылку на MainViewController и вызывать на нем методы, которые переключаются между двумя контроллерами представления.

Как это:

@implementation MainViewController
    - (void)showDogViewController {
        [self dismissModalViewControllerAnimated:YES];

        DogViewController *dvc = [[DogViewController alloc] initWithNibName:@"DogViewController" bundle:nil];
        dvc.modalPresentationStyle = UIModalPresentationFormSheet;
        dvc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        dvc.mainViewController = self;

        [self presentModalViewController:dvc animated:YES];
        [dvc release];
    }

    - (void)showCatViewController {
        [self dismissModalViewControllerAnimated:YES];

        CatViewController *cvc = [[CatViewController alloc] initWithNibName:@"CatViewController" bundle:nil];
        cvc.modalPresentationStyle = UIModalPresentationFormSheet;
        cvc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        cvc.mainViewController = self;

        [self presentModalViewController:cvc animated:YES];
        [dvc release];
    }
}
@end

@implementation DogViewController
    - (void)showCatViewController {
        [mainViewController showCatViewController]
    }
@end

@implementation CatViewController 
    - (void)showDogViewController {
        [mainViewController showDogViewController]
    }
@end
0 голосов
/ 08 ноября 2011

Почему бы вам не использовать навигационный контроллер в модальном виде, создать еще один xib и выполнить [self.navigationController pushViewController:secondViewController animated:YES];

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

UIView* superview = [self.view superview];
[self.view removeFromSuperView];
[superview addSubview:self.secondView];
0 голосов
/ 08 ноября 2011

Способ сделать это состоит в том, чтобы настроить его с помощью UINavigationController, как упоминает Mathiew.Однако, если вы действительно хотите перейти между двумя представлениями на одном контроллере представления, вы можете обратиться к этому примеру кода от Apple:

http://developer.apple.com/library/ios/#samplecode/ViewTransitions/Introduction/Intro.html

Код использует ImageViews для демонстрации эффекта, ноЯ не понимаю, почему вы не можете использовать представления вместо этого :)

0 голосов
/ 08 ноября 2011

Вы можете добавить представление в другого представления перед всеми остальными объектами и просто использовать его свойство hidden, чтобы контролировать, отображается оно или нет.

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