концептуальная или техническая проблема с программированием Какао - PullRequest
2 голосов
/ 02 марта 2009

Мне нужно получить доступ к viewcontroller из его представления.

Вот метод

-(void)changePageView:(UIViewController*)newviewcont withtransitiontype:(int)t andtransitionspeed:(int)s
{
    //Remove whatever view is currently loaded at index 0, this index is only to be used by "page" views
    UIView *oldview = [self.view.subviews objectAtIndex:0];

    [UIView beginAnimations:@"View Flip" context:nil];
    [UIView setAnimationDuration:s];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
    [newviewcont viewWillAppear:YES];
    //[oldview viewWillDisappear:YES];
    [oldview removeFromSuperview];
    [self.view insertSubview:newviewcont.view atIndex:0];
    //[oldview viewDidDisappear:YES];
    [newviewcont viewDidAppear:YES];

}

По сути, я пытаюсь написать общий метод переключения представлений, который вызывается корневым контроллером для замены представлений subviewcontorllers из представления rootcontrollers.

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

Ответы [ 3 ]

1 голос
/ 02 марта 2009

Я добавил элемент в корневой контроллер, который удерживает текущий субобзор контроллера (currentController) и ссылается на него, когда выполняется замена контроллера

-(void)changePageView:(UIViewController*)newviewcont withtransitiontype:(int)t andtransitionspeed:(int)s
{


    [UIView beginAnimations:@"View Flip" context:nil];
    [UIView setAnimationDuration:s];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
    [newviewcont viewWillAppear:YES];
    [self.currentController viewWillDisappear:YES];
    [self.currentController.view removeFromSuperview];
    [self.view insertSubview:newviewcont.view atIndex:0];
    [self.currentController viewDidDisappear:YES];
    [newviewcont viewDidAppear:YES];
    [UIView commitAnimations];


    self.currentController = newviewcont;

}
0 голосов
/ 02 марта 2009

Метод changeView() принадлежит контроллеру просмотра. Это решило бы вашу проблему, зная, что представление знает о своем контроллере (чего не следует), и это имеет больше смысла.

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

мои 2 цента:)

0 голосов
/ 02 марта 2009

Я считаю, что ваш подход неверен. Вы должны посмотреть на UINavigationController, я считаю.

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