iOS工具栏有时会突出显示/选择错误的按钮

时间:2011-06-30 19:37:51

标签: ios cocoa-touch uitoolbar highlight

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

大部分时间都可以正常工作......但有时候,在转到另一个视图并多次返回此视图后,工具栏的触摸处理似乎已关闭。它突出显示并调用错误的按钮。它也不总是相同的错误按钮;有时它就在我实际拍摄的那一个旁边,但有时它更远,甚至在工具栏的另一侧清晰。

它没有任何模式,但是如果你尝试的时间足够长(切换到另一个视图然后回到这个视图),它总会发生。当另一个视图处于不同的屏幕方向时(由于它的shouldAutorotateToInterfaceOrientation实现强制),它似乎更频繁地发生,但即使所有视图具有相同的方向,它仍然偶尔发生。当它发生时,我的选择器被调用,发送者匹配实际突出显示的按钮,而不是我触摸的按钮。因此,iOS中的某些内容似乎无法正确处理触摸。

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

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

1 个答案:

答案 0 :(得分:1)

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

这是遗留代码,我们没有注意到从视图的didRotateFromInterfaceOrientation方法调用了创建工具栏代码(出于我们无法想象的原因)。该方法被频繁调用,并且旧工具栏没有被拆除,因此它在工具栏之上创建工具栏。在这种情况下触摸处理变得不那么令人惊讶。

在那里删除调用(并将其置于viewDidLoad中,就像人们期望的那样)解决了这个问题。很抱歉浪费了每个人的时间......但也许下一个偶然发现工具栏行为的人会觉得这很有帮助。