如何禁用多点触控?

can*_*boy 35 iphone multi-touch uiview

我的应用程序有几个触发不同事件的按钮.用户不应该按住几个按钮.无论如何,按住几个按钮会崩溃应用程序.

所以,我试图在我的应用程序中禁用多点触控.

我在所有xib文件中取消选中"Multiple Touch",并且据我所知,属性'multipleTouchEnabled'和'exclusiveTouch'控制视图是否使用多点触控.所以在我的applicationDidFinishLaunching中,我把它放在:

self.mainViewController.view.multipleTouchEnabled=NO;
self.mainViewController.view.exclusiveTouch =YES;
Run Code Online (Sandbox Code Playgroud)

在我的每个视图控制器中,我都将它放在viewDidLoad中

self.view.multipleTouchEnabled=NO;
self.view.exclusiveTouch=YES;
Run Code Online (Sandbox Code Playgroud)

但是,它仍然接受多次触摸.我可以做一些事情,比如在触发事件后禁用其他按钮,但这将是一个丑陋的黑客.当然有一种方法可以正确禁用多点触控?

Mar*_*sey 44

如果一次只需要一个按钮来响应触摸,则需要为该按钮设置exclusiveTouch,而不是为父视图设置.或者,您可以在按钮获得"Touch Down"事件时禁用其他按钮.


这是后者的一个例子,在我的测试中效果更好.为这些按钮设置了exclusiveTouch,但是当你将手指从按钮的边缘移开而不是单击它时,会导致一些有趣的问题.

您需要将控制器中的插座连接到每个按钮,然后将"Touch Down","Touch Up Inside"和"Touch Up Outside"事件挂钩到控制器中的正确方法.

#import "multibuttonsViewController.h"

@implementation multibuttonsViewController

// hook this up to "Touch Down" for each button
- (IBAction) pressed: (id) sender
{
    if (sender == one)
    {
        two.enabled = false;
        three.enabled = false;
        [label setText: @"One"]; // or whatever you want to do
    }
    else if (sender == two)
    {
        one.enabled = false;
        three.enabled = false;
        [label setText: @"Two"];  // or whatever you want to do
    }
    else
    {
        one.enabled = false;
        two.enabled = false;
        [label setText: @"Three"];  // or whatever you want to do
    }
}

// hook this up to "Touch Up Inside" and "Touch Up Outside"
- (IBAction) released: (id) sender
{
    one.enabled = true;
    two.enabled = true;
    three.enabled = true;
}

@end
Run Code Online (Sandbox Code Playgroud)

  • 我只是试了一下,它对我有用.您的viewController插座是否可能未正确设置?可能值得在调试器中检查. (4认同)
  • 这是否意味着将button1.exclusiveTouch = YES; button2.exclusiveTouch = YES; button3.exclusiveTouch = YES; 在视图控制器的viewDidLoad中?我试过了 - 没有效果. (3认同)
  • 我认为setExclusiveTouch = YES应该是粗体,因为这是我认为我们大多数人都在寻找的解决方案,其余的只是一个很好的:) (3认同)

neo*_*oke 21

- (void)viewDidLoad {
    [super viewDidLoad];

    for(UIView* v in self.view.subviews)
    {
        if([v isKindOfClass:[UIButton class]])
        {
            UIButton* btn = (UIButton*)v;
            [btn setExclusiveTouch:YES];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Par*_*hta 6

- (void)viewDidLoad {
    [super viewDidLoad];

    for(UIView* v in self.view.subviews)
    {
        if([v isKindOfClass:[UIButton class]])
        {
            UIButton* btn = (UIButton*)v;
            [btn setExclusiveTouch:YES];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码经过测试,对我来说非常合适.一次按下多个按钮,没有应用程序崩溃.


Nik*_*uhe 5

您的应用程序崩溃是有原因的。进一步调查,使用调试器,看看有什么问题,而不是试图隐藏错误。

编辑:

好吧,好吧,我不得不承认我有点苛刻。您必须在每个按钮上设置exclusiveTouch 属性。就这样。multipleTouchEnabled 属性无关紧要。