如何查找是否拉出或推送ViewController?

时间:2014-05-31 23:48:44

标签: ios uiviewcontroller uinavigationcontroller

我在viewWillAppear:方法中有一个UIView动画,动画的行为与ControlView的动作有关。如果NavigationController正在推动View动画应该正常播放,如果拉回View,动画应该反向播放。 如何在ViewController方法中查看当前viewWillAppear:是否被推送或拉出?

2 个答案:

答案 0 :(得分:3)

在iOS7中,您可以实现UINavigationController委托方法

- (id <UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC;

UINavigationControllerOperation 操作

获取信息
typedef NS_ENUM(NSInteger, UINavigationControllerOperation) {
    UINavigationControllerOperationNone,
    UINavigationControllerOperationPush,
    UINavigationControllerOperationPop,
};

文档说:

  

调用以允许委托者返回交互式动画制作者对象   在视图控制器转换期间使用。

     

如果要提供自定义,请实现此委托方法   添加到视图控制器之间的交互式转换   或从导航堆栈中删除。你返回的对象应该   配置过渡的交互方面,应该工作   用animationController参数中的对象启动   动画。

     

负责管理过渡的动画师对象   动画,如果你想使用标准导航,则为零   控制器转换。

因此,在简单观察过渡的情况下,你应该在这个方法中返回nil。

答案 1 :(得分:0)

您可以使用UINavigationController的{​​{1}}媒体资源:

viewControllers

根据Apple Documentation@property(nonatomic, copy) NSArray *viewControllers

你可以打印viewControllers数组的索引,它会让你知道你现在站在哪个viewController上。

The root view controller is at index 0 in the array, the back view controller is at index n-2, and the top controller is at index n-1, where n is the number of items in the array.