9

在我的应用程序中的视图之间转换时,我在使用 TransitionfromView 时遇到问题。

设置

这是视图控制器的基本设置。它有两个视图。一个 MKMapView 和一个 UITableView。当按下切换按钮时,它应该在地图和表格之间交替视图。

这是我的 *.h 文件

@interface BrowseBeaconsViewController : UIViewController <UITableViewDelegate, MKMapViewDelegate, UITableViewDataSource, CLLocationManagerDelegate >
{

__weak IBOutlet UIBarButtonItem *refreshBeacons;
__weak IBOutlet UIBarButtonItem *toggleView;
MKMapView* beaconMapView;
__weak IBOutlet UITableView* beaconTableView;
}

所以 tableview 来自故事板,而 mapview 是在程序中创建的。

问题

[UIView transitionFromView:beaconTableView toView:beaconMapView duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:^(BOOL finished) {}];

当我从 MapView 从 TableView 转换时,tableview 的值为 null(0x0000000)。我确实理解 transitionfromview 的行为是从父视图中删除视图。但是当我尝试在转换后将表格视图添加为子视图时,它不起作用,因为该值为空。所以我的问题是,如果视图为空,如何在转换后添加 tableview?

PS:如果这是一个简单的问题,我深表歉意,但我是 iOS 编程的新手,并且在发布这个问题之前确实尝试过查看论坛。

4

3 回答 3

30

从该方法的文档中:

“默认情况下,fromView 中的视图在视图层次结构中被 toView 中的视图替换。如果两个视图都已经是视图层次结构的一部分,则可以在 options 参数中包含 UIViewAnimationOptionShowHideTransitionViews 选项以简单地隐藏或显示它们。”

因此,如果您希望保留两个视图,请将 beaconMapView 添加到视图层次结构中,并包含 UIViewAnimationOptionShowHideTransitionViews 选项。

于 2013-01-08T18:23:49.203 回答
2

您需要保留对 beaconTableView 的单独引用,或者简单地将其声明为强而不是弱。由于 beaconTableView 已被声明为弱,iOS 5+ 明白,一旦所有其他对它的引用都已删除,您就不需要它挂起,在这种情况下,通过将其从其父视图中删除。

于 2013-01-08T16:48:59.733 回答
0

移除weak,否则视图会在看起来不再需要时立即释放。

于 2017-04-07T08:05:19.470 回答