iOS:将Exclusive Touch设置为视图中的所有按钮

时间:2012-08-12 04:00:35

标签: ios uibutton touch

我的应用程序在一个窗口中有很多按钮,我想将所有这些按钮设置在一起。你有什么建议吗?感谢

8 个答案:

答案 0 :(得分:5)

有一种方法可以为应用中的所有按钮设置独占触摸,可能会有所帮助。

#import </usr/include/objc/objc-class.h>

static IMP gOringinalWillMoveToSuperview = nil;

static id newMoveToSuperviewPlusSettingExclusiveTouch(id self,SEL selector,...)
{
    va_list arg_list;
    va_start( arg_list,selector);
    gOringinalWillMoveToSuperview(self,selector,arg_list);
    [self setExclusiveTouch:YES];
    return nil;
}

-(void)addSettingExclusiveTouchToAllUIViewMethodWillMoveToSuperview
{
    gOringinalWillMoveToSuperview = class_getMethodImplementation([UIButton class], @selector(willMoveToSuperview:));
    class_replaceMethod([UIButton class], @selector(willMoveToSuperview:), &newMoveToSuperviewPlusSettingExclusiveTouch, "v@:");
}

如果您不明白这一点,可以参考thisthis

答案 1 :(得分:2)

您是否正在寻找一种简单的方法来立即设置它们?

如果您拥有数组中的所有按钮(例如,它们都连接到相同的IBOutletCollection),您可以使用键值编码来设置数组的exclusiveTouch属性:

[buttonArray setValue:[NSNumber numberWithBool:YES] forKey:@"exclusiveTouch"];
然后,NSArray将对数组中的每个项调用相同的方法。

答案 2 :(得分:2)

-(void)setExclusiveTouchForButtons:(UIView *)myView
{
    for (UIView * v in [myView subviews]) {
        if([v isKindOfClass:[UIButton class]])
            [((UIButton *)v) setExclusiveTouch:YES];
        else if ([v isKindOfClass:[UIView class]]){
            [self setExclusiveTouchForButtons:v];
        }
    }
}

然后在viewDidAppear

调用此函数

答案 3 :(得分:1)

如果这些按钮都在同一视图中,您可以循环浏览视图的子视图,测试特定子视图是否为按钮(或者如果您有一组则测试标记)并在每个按钮上设置exclusiveTouch。

答案 4 :(得分:1)

我刚刚找到了答案:

#pragma mark Set Buttons Exclusive Touch Yes
-(void)setExclusiveTouchForButtons:(UIView *)myView
{
    for (UIView * button in [myView subviews]) {
        if([button isKindOfClass:[UIButton class]])
            [((UIButton *)button) setExclusiveTouch:YES];
    }
}

Source

答案 5 :(得分:1)

如果您想在整个应用程序中为所有UIButton设置exclusiveTouch 方法调整将是您的完美解决方案。

这个答案很好地解释了这个问题:https://stackoverflow.com/a/24534814/976246,它对我来说非常适合。

另请阅读本文,了解this (http://nshipster.com/method-swizzling/) tecknique如何用于各种目的。

答案 6 :(得分:0)

如果要以实际方式添加按钮,则在添加到其超级视图之前,为每个按钮向按钮[button setExclusiveTouch:YES];发送消息。否则,如果您使用的是xib,则必须将相同的消息发送到viewDidLoad或loadView中的按钮。

答案 7 :(得分:0)

以下是swift中的一些代码,它们将为viewcontroller的视图中的所有按钮设置独占触摸

        int timerinterval = (int) Toolkit.getDefaultToolkit().
                              getDesktopProperty("awt.multiClickInterval");

        final Timer timer = new Timer(timerinterval, new ActionListener()
        {
          public void actionPerformed(ActionEvent acEvt)
          {
            internalFrame2.setVisible(false);
          }
        });

        jb.addMouseListener(new MouseAdapter()
        {
          public void mouseClicked(final MouseEvent evt)
          {
            System.out.println("Button " + evt.getClickCount());
            timer.setRepeats(false);
            timer.start();
            if (evt.getClickCount() > 1)
            {
              timer.restart();
            }
          }
        });