iphone使用滑动手势更改视图时维护导航控制器

时间:2014-01-24 18:30:43

标签: xcode uinavigationcontroller uiswipegesturerecognizer

在我的应用程序中,我有一个表视图中的项目列表。点击其中一个,该应用程序显示该项目的详细信息。细节显示,并通过导航控制器的后退按钮,应用程序返回列表。

在详细视图中,我实现了一种滑动手势的方法,以便将视图更改为列表的第二个元素的详细信息,依此类推。有用。

更改视图的方法是:

  - (void)oneFingerSwipeLeft:(UITapGestureRecognizer *)recognizer {

    int idx=currentIdx;

    if (idx ==[todasLasTapas count]-1) {   //last object vuelvo al primero
        idx= -1;
    }


    ClassInfo *info =[allInfo objectAtIndex:idx+1];

    //VIEW CONTROLLER
    MoreInfo *moreInfoController =[[MoreInfo alloc]initWithNibName:@"MoreInfoController" bundle:nil];

    //passing the details to view
    moreInfoController.id           = info.uniqueId;
    moreInfoController.name      = info.name;

    // CHANGE TO NEXT VIEW
    moreInfoController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:moreInfoController animated:YES];

}

问题是导航控制器在出现“第二”视图时消失。我的想法是导航仍然是为了回到主表列表。

有人能帮帮我吗?

1 个答案:

答案 0 :(得分:1)

不幸的是,呈现模态视图控制器发生在UINavigationController堆栈之外。因此,当您调用presentModalViewController时,您将控制器完全置于UINavigationController管理的控制器堆栈之外。

您可以保留大部分实现,但只需将MoreInfo的视图作为子视图添加到当前视图,即可切换模态视图控制器的演示文稿。

如果您想要更优雅地保存内存,只需在两个UIView(当前显示的视图和下一个要显示的视图 - 在最后一个详细视图中重复使用)之间切换。

以下是您可以执行此操作的代码的更新版本:

- (void)oneFingerSwipeLeft:(UITapGestureRecognizer *)recognizer {
    int idx=currentIdx;
    if (idx ==[todasLasTapas count]-1) {   //last object vuelvo al primero
        idx= -1;
    }
    ClassInfo *info =[allInfo objectAtIndex:idx+1];
    //VIEW CONTROLLER
    MoreInfo *moreInfoController =[[MoreInfo alloc]initWithNibName:@"MoreInfoController" bundle:nil];

    //passing the details to view
    moreInfoController.id = info.uniqueId;
    moreInfoController.name = info.name;
    [UIView transitionFromView:self.view
                        toView:moreInfoController.view
                      duration:2
                       options:UIViewAnimationOptionTransitionCrossDissolve 
                    completion:^(BOOL finished) {
                        [self.view removeFromSuperview];
                    }];
}

这是一篇文章,展示如何实现自定义动画以溶解到另一个UIView:

How to make dissolve animation on changing views on iphone?