Iphone 取消选择外部触地按钮

Iphone 取消选择外部触地按钮,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,我有一个ui按钮,它在UIControlEventTouchUpInside上选择自己。它在UIControlEventTouchUpOutside上取消选择自身。我还希望它取消选择自己时,有一个触摸按钮外。有没有一种好方法可以做到这一点,而无需子类化UIWindow并重写-hitTest:withEvent: 编辑:我刚刚发现,这证实了我的担心,即没有一种真正干净的方法来完成这项工作。这不是按钮的工作原理。如果它们内部没有激活的触摸,则它们无法激活。你到底想实现什么?也许UIBUtton不是这

我有一个
ui按钮
,它在
UIControlEventTouchUpInside
上选择自己。它在
UIControlEventTouchUpOutside
上取消选择自身。我还希望它取消选择自己时,有一个触摸按钮外。有没有一种好方法可以做到这一点,而无需子类化
UIWindow
并重写
-hitTest:withEvent:


编辑:我刚刚发现,这证实了我的担心,即没有一种真正干净的方法来完成这项工作。

这不是按钮的工作原理。如果它们内部没有激活的触摸,则它们无法激活。你到底想实现什么?也许UIBUtton不是这里的最佳选择。

您可以通过实现touchesBegind/Moved/End方法使用UIViewController来实现这一点。如果他们检测到按钮外有触摸,则将其状态设置回正常状态。看看。

我解决了这个问题,然后发布了。我不必子类化
UIWindow
,但我确实需要用“selected”覆盖
-hitTest:withEvent:

,我的意思是它将
UIControlStateSelected
添加到其控制状态。这就是
ui开关
存储其开/关状态的方式。我的按钮用于应用程序内购买,因此其行为类似于iTunes或应用商店中的苹果购买按钮。第一次点击会改变按钮的控制状态,第二次点击会执行一个操作。你真的不应该使用按钮状态来获得特定的行为。我认为将自己的状态添加到外部变量甚至子类中的按钮要简单得多。像
ShowingPrice
ShowingBuyNow
。我可能会将按钮变成一个子类,但我不明白为什么在
controlState
属性中保留有关其状态的信息是不合适的。也许
UIControlStateApplication
位比
UIControlStateSelected
更合适,但我甚至不相信这一点。通过使用
controlState
,我可以免费获得一些东西,比如根据按钮的状态更改
背景图像
标题
,以及
标题颜色
。这比子类化
UIWindow
要好,但我认为这不会满足我的需要。该按钮位于
UITableView的
UITableView的
UITableView中的
UINavigationController的
视图中的
UITableView单元格中。如果要“吃掉”选项卡栏按钮上的点击,则必须在视图层次结构的更高层实现
-touchsbegind:withEvent:
方法。这正是我想要避免的。我的
UITabBarController
不需要知道视图层次结构下五级按钮的状态。我希望按钮本身能够在窗口框架中的任何位置被点击。我不经常使用它,所以我不知道这是否有帮助,但当它被选中时,你可以尝试成为按钮的第一响应者。再说一次,这可能没有任何效果,但我想不出其他任何东西。苹果喜欢保留一些好的功能。不幸的是,第一响应者只是非接触事件的第一响应者。触摸事件沿视图层次结构向下移动,然后沿响应器链向上移动。然而,
exclusiveTouch
属性听起来很有希望。我之前拒绝了它,因为事件处理文档表明它不会影响视图框架之外的接触。您的项目无法生成:pbxcp:DCSKit.bundle:没有这样的文件或目录