UIBarButtonItem发送的动作适用于iOS 6但不适用于iOS 5

时间:2012-12-02 23:33:08

标签: objective-c ios uibarbuttonitem

我要撕掉我的头发,因为我无法想到为什么会出现这种情况的原因在5但不是6.所以基本上,我有一个以模态方式呈现的视图,带有导航栏和取消按钮({{ 1}} - 导航栏中没有任何自定义内容,只有标准按钮。点击此取消按钮时,我希望模态视图消失。这在iOS 6中运行得很好。但对于iOS 5,它拒绝在我的代码中使用它的3个地方中的2个工作。对我来说奇怪的是它适用于一个而不是另外两个。

使用故事板,我右键单击按钮,单击“已发送操作”下的“选择器”,然后将其拖动到视图控制器的.h文件中的相应UIBarButtonItem方法。使用Xcode中的小闪烁动画成功确认链接。当我在iOS 6上运行应用程序时(模拟器或设备无关紧要),该方法在按钮点击时成功执行,我的模态视图被解除。但是,在iOS 5上,永远不会调用该方法(我在方法中设置断点以查看它们是否会被命中)。我甚至尝试将IBAction方法中的参数从IBAction切换到id。不过没有雪茄。

我还尝试以编程方式(在UIBarButtonItem *中)将取消按钮的操作设置为选择器。我甚至将目标设定为VC。再没有雪茄了。以下是我当前设置的屏幕截图:

Please note the IBAction methods

请注意viewDidLoad方法。

我错过了文档中是否有一些神奇的条款?为了让它在iOS 5中运行,我需要做些非常特别的事情吗?这对我来说肯定是个错误,但我对这些东西还是比较新的所以我知道什么。

我正在使用Xcode 4.5.2和故事板,并将iOS 5和iOS 6作为发布目标。

感谢您的帮助,谢谢。

3 个答案:

答案 0 :(得分:2)

我认为可能存在使用 GestureRecognizer 的问题,请对该代码进行评论并尝试...

答案 1 :(得分:1)

我添加了一个单独的UIView,它位于我的文本字段和按钮下方,位于导航栏/标题下方。我以编程方式添加了点击手势,这似乎识别了我的点按和取消按钮的操作。我仍然想知道为什么如果手势在根视图上,则轻击手势会吞噬UIBarButtonItem的动作。 This question helped me figure this out。感谢。

答案 2 :(得分:0)

您可以使用以下委托方法 从手势识别器排除视图/控件

// UIGestureRecognizerDelegate

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    // exclude your view from gesture recognizer
    if(yourView == touch.view)
    {
        return NO;
    }

    // 
    return YES;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { // exclude your view from gesture recognizer if(yourView == touch.view) { return NO; } // return YES; }