如何在没有NavigationController的情况下推送子ViewControllers?

时间:2011-05-22 19:14:07

标签: iphone objective-c ios ipad ios4

我想将viewControllers推送到我的主viewController上的一个区域。据我所知,除非您将它添加到UIWindow,否则不能使用NavigationController。

此动画提醒UIScrollView水平滚动。但我想让它像NavigationController一样工作。当用户按下特定操作时,ViewControllers将被更改。

ViewController2将成为带有其他按钮的tableView。

ViewController3将成为一个从tableView更改对象的表单。

Animation of viewControllers http://i55.tinypic.com/3589ysn.png

4 个答案:

答案 0 :(得分:7)

我最近在UIView中找到了一种方法,可以创建切换视图的“推送或弹出”感觉。

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion

这直接来自UIView文档,因此我建议您查看UIView Class Reference以查看具体信息。基本上,它将视图切换到另一个视图,而options:部分允许您从多种不同的样式中进行选择。

答案 1 :(得分:2)

我实际上通过玩UIView动画来解决它。

-(void)slideInView:(UIView*)newView toView:(UIView*)oldView {
    /* Sets the view outside the right edge and adds it to mainView */
    newView.bounds = mainView.bounds;
    newView.frame = CGRectMake(newView.frame.origin.x + 784, newView.frame.origin.y, newView.frame.size.width, newView.frame.size.height);
    [mainView addSubview:newView];

    /* Begin transition */
    [UIView beginAnimations:@"Slide Left" context:oldView];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDelay:0.0f];
    [UIView setAnimationDuration:0.5f];
    [UIView setAnimationDidStopSelector:@selector(slideInCompleted:finished:context:)];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
    newView.frame = CGRectMake(0,0, newView.frame.size.width, newView.frame.size.height);
    oldView.frame = CGRectMake(oldView.frame.origin.x - 784, oldView.frame.origin.y, oldView.frame.size.width, oldView.frame.size.height);
    [UIView commitAnimations];
}

-(void)slideInCompleted:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
    UIView *view = (UIView*)context;
    [view removeFromSuperview];
}

并使用它

menuController = [[MenuViewController alloc] init];
[self slideOutView:menuController.view toView:loginController.view];
[oldController release];

记得你已经分配了一个UIViewController,你需要在使用它时释放它!在示例中,我完成了loginController并将其释放。

答案 2 :(得分:1)

绝对没有办法在没有UINavigationController的情况下“推”原生任何控制器。但是,您可以进出视图的动画。

使用您发布的示例,看起来简单的UIScrollView将是您最简单的选择。

答案 3 :(得分:0)

我使用的是UIScrollView,因为它可以捕捉到内置的“页面”。你也可以使用setContentOffset滚动到任何部分:动画:。