Ios 取消以前的性能请求,目标为:isn';他不为我工作

Ios 取消以前的性能请求,目标为:isn';他不为我工作,ios,Ios,我要求默认情况下隐藏导航栏。如果用户点击屏幕,它会出现;如果用户点击第二次,它会消失;如果用户没有点击第二次,它会在3秒钟后消失 所以我实现了如下处理方法: - (void) navigationBarDisplay { [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(navigationBarHide) object:nil]; [[self navigationControl

我要求默认情况下隐藏导航栏。如果用户点击屏幕,它会出现;如果用户点击第二次,它会消失;如果用户没有点击第二次,它会在3秒钟后消失

所以我实现了如下处理方法:

- (void) navigationBarDisplay
{
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(navigationBarHide) object:nil]; 
    [[self navigationController] setNavigationBarHidden:NO animated:YES];
    [self performSelector:@selector(hideNavigationBar) withObject:self afterDelay:3.0];
}


- (void) navigationBarHide
{
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(navigationBarHide) object:nil]; 
    [[self navigationController] setNavigationBarHidden:YES animated:YES];
}
我在每个函数开始时调用cancelPreviousPerformRequestWithTarget,以取消对performSelector:@selector(hideNavigationBar)的任何以前未完成的调用,从而重置内容,以便在显示导航栏后始终应用延迟3

但是,如果我点击屏幕使导航栏出现,则在3秒钟结束之前,我再次点击使其消失,然后第三次点击使其重新出现,然后在第一次点击后3秒钟自动隐藏,而不是第三次点击后3秒钟

我也试过了

[[NSRunLoop mainRunLoop ]cancelPerformSelector:@selector(navigationBarHide) target:self argument:nil]; 
但都一样


你知道为什么这样不行吗?或者是否有更好的解决方案?

在我看来,您的“取消”与“执行”不匹配:

NSObject cancelPreviousPerformRequestsWithTarget:self 
selector:@selector(hideNavigationBar) object:nil
vs


在一种情况下,“对象”是
nil
;另一方面,在我看来,您的“取消”与“执行”不匹配:

NSObject cancelPreviousPerformRequestsWithTarget:self 
selector:@selector(hideNavigationBar) object:nil
vs

在一种情况下,“对象”是
nil
;另一个是
self