在将导航控制器弹出回根视图的选项卡栏上检测到双击
Posted
技术标签:
【中文标题】在将导航控制器弹出回根视图的选项卡栏上检测到双击【英文标题】:Detecting double tap on a tab bar that pops navigation controller back to root view 【发布时间】:2011-08-28 12:54:42 【问题描述】:我的 iPhone 应用有一个标签栏控制器,其中一个标签是导航控制器。当用户双击选项卡时,它会导致导航控制器弹回根视图。
我的问题是我的导航层次结构中的某些视图在与该视图关联的 navigationItem 中有一个特定的条形按钮。所以我根据推送到navigationController的视图以编程方式设置rightBarButtonItem。当双击发生时,它会弹回根视图,但不会弹回右键。该按钮似乎与弹出的具有自己特定按钮的最后一个视图相同。
所以我的根视图与另一个视图的条形按钮不匹配。
有没有办法检测双击动作发生的时间?在这种情况下,我可以将导航栏上的按钮重置为正确的按钮。我尝试在 viewWillAppear/viewDidAppear/viewDidLoad 方法中执行此操作,但是当标签栏双击发生时,这些方法似乎没有被调用。
【问题讨论】:
我没有尝试检测常规按钮上的双击 - 它是标签栏控制器选项卡上的双击(不是视图本身的任何内容) 【参考方案1】:确保您始终拥有独立于视图可见方式的正确按钮(例如,通过弹出子视图控制器或双击标签栏)的最安全方法是在每次视图变得可见。因此,在您的根视图控制器中:
-(void)viewWillAppear
//check button, change if desired
【讨论】:
谢谢 - 这让我走上了正轨。起初我以为我的 viewWillAppear 方法没有被调用,但事实证明,如果您在导航控制器上使用 initWithRootViewController 方法,那么当双击标签栏时,视图控制器将调用其 viewWillAppear 方法。但我的问题还在于 popToRootViewController 方法在某些旧版本的 ios 中也会返回到错误的 navigationItem,如下所述:***.com/questions/5902164/…以上是关于在将导航控制器弹出回根视图的选项卡栏上检测到双击的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 4.2 在 IB 的选项卡栏上放置导航控制器时的警告
iPhone Objective-C:使用导航控制器单击选项卡时禁用堆栈弹出
选项卡栏,当来自另一个选项卡的视图控制器时弹出到根视图控制器(默认 vc)