检测用户何时离开viewController

时间:2016-06-29 11:50:21

标签: ios objective-c

我有控制器(新闻屏幕),我需要检测用户何时离开它。我试过了

- (void)viewWillDisappear:(BOOL)animated

,但问题是,当用户点击分享按钮(在社交网络中分享等)时该方法会触发,但在共享用户后仍处于新闻屏幕中,因此无法正常工作。

我也试过

-(void)willMoveToParentViewController:(UIViewController *)parent {

,但它也会在用户第一次进入控制器时触发,这是错误的(我只需检测离开)。

我如何检测用户何时离开控制器,但是当他进入“共享”弹出屏幕时却没有触发?

2 个答案:

答案 0 :(得分:2)

  

这四种方法可以在视图控制器的外观回调中使用,以确定它是作为子视图控制器呈现,关闭,添加还是删除。例如,视图控制器可以通过在viewWillDisappear中询问自己来检查它是否正在消失,因为它已被解除或弹出:    检查表达式的方法([self isBeingDismissed] || [self isMovingFromParentViewController])。

- (BOOL)isBeingPresented NS_AVAILABLE_IOS(5_0);
- (BOOL)isBeingDismissed NS_AVAILABLE_IOS(5_0);

- (BOOL)isMovingToParentViewController NS_AVAILABLE_IOS(5_0);
- (BOOL)isMovingFromParentViewController NS_AVAILABLE_IOS(5_0);

为您的方案使用isMovingFromParentViewController

 -(void)viewWillDisappear:(BOOL)animated{
       [super viewWillDisappear:animated];

       if (self.isMovingFromParentViewController){ 

       }
  }

答案 1 :(得分:1)

检查一下它会对你有所帮助。

UIActivityViewController *conroller=[[UIActivityViewController alloc] initWithActivityItems:@[@"Hello"] applicationActivities:nil];

您可以在此处完成共享事务

[conroller setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError){
      if(!activityError)
         NSLog(@"Shared");
}];

完成将告诉您活动已经展示,因此您可以像这样处理完成时要处理的活动

[self presentViewController:conroller animated:YES completion:^{
       NSLog(@"Activity Appeared"); //Same as viewWillDisappear
}];

希望这会有所帮助。