Примеры контроллеров представления контейнера [закрыто]


94

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

Меня особенно интересует метод:

transitionFromViewController:toViewController:duration:options:animations:completion:

Вы нашли другие источники для этого, кроме упомянутого гиперкрипта?
— Джон Эстропиа

1
Еще нет. Я собираюсь покопаться позже сегодня, если у меня будет время. Кажется странным, что о нем было бы так мало информации, учитывая, насколько оно важно и полезно. Интересно, есть ли в нем ошибки и будет ли лучше документировано, когда оно улучшится.
— Undistraction

3
Это меня очень сбивает с толку. Например, в представлении может быть только один встроенный контроллер. Как насчет того, чтобы переключить контроллер на это представление контейнера?
— user4951

@JanakNirmal Весьма признателен.
— Undistraction

могу ли я скрыть вид контейнера
— Маулик шах

Ответы:


51

Лучшее, что я нашел до сих пор, - это сеанс 102 сеанса WWDC 2011 - Реализация ограничения UIViewController .


1
То же. Это не мой любимый пример демонстрационного кода, но он правильно реализует контейнеры VC, а также управление памятью - действительно важно, чтобы ваши дочерние контроллеры представления были освобождены, когда они больше не видны.
— memmons

1
К сожалению, демонстрация того, как использовать ContainerViewController, не сработала, потому что на его iPad не была настроена электронная почта :-(
— Кен М. Хаггерти,

Есть ли в этом сеансе образец кода?
— user4951

У вас есть пример кода, он мне нужен, потому что я много пробовал, но еще не нашел растворенного вещества.
— iPhone программно,

37

В дополнение к сеансу WWDC Session Video Session 102 - Реализация UIViewController Containment, о которой уже упоминалось о гиперкрипте, сеанс Apple WWDC 2012 «Эволюция контроллеров представления в iOS» также охватывает эту тему, а пример кода является частью пакета примеров кода:

https://developer.apple.com/devcenter/download.action?path=/wwdc_2012/wwdc_2012_sample_code/wwdc_2012_session_code.dmg

Здесь также есть пример: https://github.com/toolmanGitHub/stackedViewControllers


2
+1 упоминание, где взять этот проклятый пакет кода. Я просматривал это.
— user4951

6
+1 еще раз, почему o почему Apple не может разместить код сеансов WWDC на своих членских страницах?
— axello

+1, не могли бы вы поделиться, как получить этот путь к исходному коду?
— Джанак Нирмал

1
@JanakNirmal, какой исходный код у вас возникают проблемы с получением? Чтобы получить код WWDC, просто перейдите по ссылке dmg и войдите со своим идентификатором разработчика Apple.
— JosephH

17
- (void)viewDidLoad{
    [super viewDidLoad];

    // I put self in a Navigation VC so we can use its right navigationbar 
    // item for triggering the transition
    self.navigationItem.rightBarButtonItem = 
     [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit 
                                                    target:self 
                                                    action:@selector(button:)] 
                                                                  autorelease];

    // create test1 and test2 instance (subclass UIViewController and 
    // also need to define their own nibs)
    vc1 = [[test1 alloc]initWithNibName:@"test1" bundle:nil];
    vc2 = [[test2 alloc]initWithNibName:@"test2" bundle:nil];

    //add to the container vc which is self    
    [self addChildViewController:vc1];
    [self addChildViewController:vc2];

    //the entry view (will be removed from it superview later by the api)
    [self.view addSubview:vc1.view];
}

этот IBAction запускает переход между двумя VC:

-(IBAction)button:(id)sender {
    [self transitionFromViewController:vc1 
                      toViewController:vc2 
                              duration:0.5    
                               options:UIViewAnimationOptionTransitionCurlDown 
                            animations:nil 
                            completion:nil];
}

1
Это отличный пример. Но управление памятью в этом случае можно улучшить: stackoverflow.com/a/8453677/849616 для более подходящего решения.
— Vive

1
Не то чтобы ты ошибался. Но [self addChildViewController: vc1]; не имеет смысла. Контейнер VC может иметь НЕСКОЛЬКО Контроллеров представления контейнера.
— user4951

@Vive В моем проекте я достиг точки, когда меня беспокоит управление памятью. Не могли бы вы сказать мне, какая конкретно ссылка, которую вы разместили, лучше с точки зрения управления памятью? Я совсем новичок и с трудом вижу расхождения
— jacobronniegeorge


10

Может ли это:

http://subjective-objective-c.blogspot.com/2011/08/writing-high-quality-view-controller.html

Достаточно для ваших нужд?


4
На самом деле я это уже нашел, но, к сожалению, это написано об Ios4, но 5 внесла существенные изменения. Apple теперь явно поддерживает создание настраиваемых контейнеров контроллера представления, хотя, похоже, они не хотят помогать нам разобраться, как их использовать. Спасибо хоть.
— Undistraction

Вы можете показать мне, где это говорят. Не сомневаюсь в тебе, просто любопытно, потому что я тоже боролся с этим.
— Руи Перес

4
Не беспокойся. Я просмотрел код его контейнерных классов, и ни один из них не использовал ни один из следующих методов: addChildViewController :, removeFromParentViewController, transitionFromViewController: toViewController: duration: options: animations: Завершение :, willMoveToParentViewController: и didMoveToParentViewController: Все они упомянуты в обновленном Документация ios5 для UIViewController.
— Undistraction

8

не знаю, является ли это «хорошим» примером, но вы можете получить бесплатный контейнер ViewController по адресу https://bitbucket.org/javieralonso/jaacordeonviewcontroller/overview

Контроллер представления контейнера полной метафоры аккордеона


Хорошая находка. Это выглядит полезным.
— Undistraction

3

Это мои любимые (готовые к iOS7) учебники / примеры по этой теме (исходный код всех трех доступен на github):

Просмотр содержания контроллера

Пользовательские переходы контроллера представления контейнера

Переходы контроллера интерактивного настраиваемого представления контейнера

И затем, конечно, Apple предлагает целую рецензию на эту тему, которую я считаю бесценной:

Создание настраиваемых контроллеров представления контейнера

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.