我有控制器(新闻屏幕),我需要检测用户何时离开它。我试过了
- (void)viewWillDisappear:(BOOL)animated
,但问题是,当用户点击分享按钮(在社交网络中分享等)时该方法会触发,但在共享用户后仍处于新闻屏幕中,因此无法正常工作。
我也试过
-(void)willMoveToParentViewController:(UIViewController *)parent {
,但它也会在用户第一次进入控制器时触发,这是错误的(我只需检测离开)。
我如何检测用户何时离开控制器,但是当他进入“共享”弹出屏幕时却没有触发?
答案 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
}];
希望这会有所帮助。