我有一个iOS应用程序,可以在一个视图中用代码制作工具栏。这里没什么好看的;只需使用UIToolbar setItems:animated(无动画)将一堆标准UIBarButtonItems(使用initWithImage初始化,每个调用一个不同的选择器)添加到工具栏(连同间隔符)。

在大多数情况下,这都可以正常工作……但是有时,在转到另一视图并多次返回该视图之后,工具栏的触摸处理似乎已关闭。它突出显示并调用了错误的按钮。也不总是错误的按钮。有时它是我实际点击的那个旁边的一个,但是其他时候它更远,甚至在工具栏的另一侧也很清楚。

它没有任何模式,但是如果您尝试足够长的时间(切换到另一个视图然后再回到该视图),它总是会发生。当另一个视图位于不同的屏幕方向(由其shouldAutorotateToInterfaceOrientation实现强制)时,这种情况似乎更经常发生,但是即使所有视图都具有相同的方向,它仍然会不时发生。发生这种情况时,我的选择器将由与实际高亮显示的按钮匹配的发件人调用,而不是与我触摸的按钮匹配。因此,这似乎确实是iOS中无法正确处理触摸的问题。

我的google-fu完全没有打开关于此问题的任何其他报告...似乎一定是Apple Bug,因为我的代码都没有涉及工具栏的触摸处理。在iOS 4.3下的模拟器和设备上均会发生这种情况(尚未尝试其他版本)。

还有其他人遇到这个问题吗?关于如何避免的任何建议?

最佳答案

好的,我发现了问题。不是代码本身创建了工具栏。它被调用的地方(以及频率!)。

这是旧代码,我们还没有注意到从视图的didRotateFromInterfaceOrientation方法中调用了创建工具栏代码(出于无法想象的原因)。该方法被频繁调用,并且旧的工具栏没有被拆除,因此它是在工具栏顶部创建工具栏。在这种情况下触摸处理变得不奇怪也就不足为奇了。

删除该呼叫(将其放到viewDidLoad中,就像人们期望的那样)解决了该问题。很抱歉浪费大家的时间...但是也许下一个偶然发现错误的工具栏行为的人会发现这个有用。

关于ios - iOS工具栏有时会高亮显示/选择错误的按钮,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6540166/

10-15 08:05