2011-10-13 3 views
94

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

Я специально заинтересован в методе:

transitionFromViewController:toViewController:duration:options:animations:completion: 
+0

ли вы найти другие источники для этого, кроме одной hypercrypt упомянутых? –

+1

Пока нет. Сегодня у меня будет еще один копать, если у меня будет время. Кажется странным, что будет так мало информации об этом, учитывая, насколько он важен и полезен. Интересно, неудобно ли это, и будет лучше документировано, когда оно будет улучшено. – Undistraction

+3

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

ответ

51

Лучшее, что я нашел до сих пор, - это видеозапись сессии WWDC 2011 Session 102 - Implementing UIViewController Containment.

+1

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

+1

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

+0

Имеет ли этот сеанс образец кода? –

10

Может ли это:

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

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

+4

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

+0

Можете ли вы показать мне, где они это говорят. Не сомневайтесь в вас, просто любопытно, потому что я тоже борется с этим. – Peres

+4

Не беспокойтесь. Я просмотрел код для его контейнерных классов и ни один из них не использовать любого из следующих способов: addChildViewController :, removeFromParentViewController, transitionFromViewController: toViewController: Продолжительность: опции: анимация: завершающие :, willMoveToParentViewController: и didMoveToParentViewController: Какие все упомянутых в обновленной документации ios5 для UIViewController. – Undistraction

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 вызывает переход между двумя VCs:

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

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

+1

Не то, но [self addChildViewController: vc1]; не имеет смысла. Контейнер VC может иметь контроллеры типа SEVERAL Container. –

+0

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

37

В дополнение к сеансу видеосвязи WWDC Session 102 - Implementing UIViewController Containment, что гиперкрипт уже mentio Нед, Apple WWDC 2012 session on "The Evolution of View Controllers on 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 упоминание о том, где взять этот проклятый код. Я просматривал это. –

+6

+1 снова, почему? Почему Apple не может поставить код сеанса WWDC на свои страницы-члены? – axello

+0

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

3

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

View Controller Containment

Custom Container View Controller Transitions

Interactive Custom Container View Controller Transitions

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

Creating Custom Container View Controllers

Смежные вопросы