【问题标题】:Strange UIButton behavior: Is that normal?奇怪的 UIButton 行为:这正常吗?
【发布时间】:2010-11-20 23:51:41
【问题描述】:

我有一个简单的 UIButton 并且想要在用户触摸它时做一些事情,但是随后将手指移到按钮之外并且不触摸屏幕。所以看来我需要监听 UIControlEventTouchUpOutside 事件。

在我的视图控制器中,我这样做了:

UIButton *bt = [[UIButton alloc] initWithFrame:rect];
[bt setBackgroundColor:[UIColor whiteColor]];
[bt addTarget:self action:@selector(onTouchUpOutside) forControlEvents:UIControlEventTouchUpOutside];
[self.view addSubview:bt];

以及对应的动作方法:

- (void)onTouchUpOutside {
    NSLog(@"touchUpOutside");
}

现在猜猜是什么?我触摸按钮,然后将手指拖到按钮外面,取消触摸屏幕并且没有记录任何消息。事实上,它会记录我发生了 UIControlEventTouchUpInside 事件,即使我的手指并没有真正位于按钮上方。似乎我可以在触摸时将手指围绕该按钮移动大约 150% 的宽度和高度,并且当我不触摸时它会告诉我手指在按钮中。但是当我将它移到很远(= 足够远)时,我确实收到了“touchUpOutside”日志消息。那么这只是苹果的另一个疯狂,比如延迟 -touchesMoved 之类的东西吗?还是我做错了什么?

【问题讨论】:

    标签: iphone cocoa-touch uikit uibutton


    【解决方案1】:

    我发现这恰好是正常的 UIKit 行为。奇怪,但很正常。用户必须将手指移得足够远才能“取消”触摸。如果手指距离触摸按钮和liftet 的距离不够远,则触发touchUpInside 事件。找不到来自苹果的文字,但我在几个项目中进行了多次测试,包括一个带有普通 UIButton 和 IBAction 的全新项目。苹果的一些示例代码也显示了同样的奇怪行为。

    【讨论】:

      【解决方案2】:

      touchUpInside 会在您将手指移到按钮外一点时触发,因为人们的手指很大且不精确。

      如果您真的想覆盖此行为,请在touchUpInside 处理程序中检查触摸的位置,然后如果在按钮的bounds 之外触摸它,则直接调用touchUpOutside 处理程序。

      【讨论】:

      • 好吧,那是因为可用性......我只是想知道为什么那个区域如此巨大;-)
      • 人们的手指比你想象的要粗,也比你想象的要笨。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多