在我的应用程序中,我有一个表视图中的项目列表。点击其中一个,该应用程序显示该项目的详细信息。细节显示,并通过导航控制器的后退按钮,应用程序返回列表。
在详细视图中,我实现了一种滑动手势的方法,以便将视图更改为列表的第二个元素的详细信息,依此类推。有用。
更改视图的方法是:
- (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];
}
问题是导航控制器在出现“第二”视图时消失。我的想法是导航仍然是为了回到主表列表。
有人能帮帮我吗?
答案 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: