按钮触摸仅工作一次

Posted

技术标签:

【中文标题】按钮触摸仅工作一次【英文标题】:Button Touch Only Works Once 【发布时间】:2011-09-08 22:13:53 【问题描述】:

出于某种原因,与我的 UIButton 的交互只能进行一次。我已经通过 IBAction 和带有“addTarget”的 IBOutlet 尝试过。我不知道为什么。

上下文:

基础视图控制器

- (IBAction) button_touched:(id)sender; //<-- Declared here, but not implemented
- (void)userInputReceived:(BOOL)bSuccess; //<-- Declared here, but not implemented

ViewController1 : BaseViewController

- (IBAction) button_touched:(id)sender; //<-- Implemented here
- (void)userInputReceived:(BOOL)bSuccess; //<-- Implemented here

另外,这是我尝试“addTarget”的地方,但这也不起作用(第一次触摸有效,但第二次无效)

在 ViewController1 (vc1) 的“button_touched”方法中,我像这样调用另一个类:

[someOtherClassObject doSomethingWithMyView:self];

该类只是弹出一个消息框,获取用户输入,然后回调视图控制器:

(在 SomeOtherClass 内):

-(void)doSomethingWithMyView:(BaseViewController*)vc

    // Do Something
    [vc userInputReceived:TRUE];

一旦此工作流程执行一次,按钮触摸就不再调用“button_touch”方法。无论我做什么,我都无法再次调用它。

在一个流行的 BBS 论坛上的一个帖子中,有人提到这样的问题可能是由于没有您认为自己拥有的对象 (vc1),而是它的另一个实例。所以,我在很多地方记录了类似 NSLog("instance: %p", self) 的实例,而且它总是一样的。

非常感谢任何想法。这很令人沮丧。

【问题讨论】:

你能从你的 button_touched: 方法中发布你所有的代码吗?另外,您是如何将您的按钮连接到 IBAction 的?您需要什么样的触摸方式? 【参考方案1】:

也许是在黑暗中拍摄,但您的视图控制器的视图可能由于在另一个对象内显示消息而失去了第一响应者状态(这是什么类型的对象以及消息如何显示?)。

在你的陈述之后尝试:

[vc userInputReceived:TRUE];

添加行

[[UIApplication sharedApplication].keyWindow makeFirstResponder:vc.view];

【讨论】:

好主意,但没有骰子。我终于弄清楚了它是什么,如果没有看到我的大量代码,任何人都无法找到它。但是,以防万一其他人遇到类似问题,请务必仔细检查您的代码路径。我正在清除我的基类中的一个对象,该对象需要为一个子类清除,而不是另一个。这种数据清除是导致后续消息不被触发的原因——我在发送消息之前检查了 nil。可怕,我知道,我希望我没有浪费很多时间,但希望这也能节省其他人的时间。 :)

以上是关于按钮触摸仅工作一次的主要内容,如果未能解决你的问题,请参考以下文章

在移动设备上实现“更少”时仅触摸一次移动火力

iOS Touchesbegan 后续触摸仅在第一次触摸移动时到达

触摸按钮命令执行问题 | WPF |虚拟机 |视窗 10

如何使用 jQuery 在 iPad 上避免“双重触摸”?

触摸事件仅在iPad iOS 11.4上的Mobile Safari中滚动时触发“一次”

按钮背景颜色动画禁用触摸(IOS)