1

我的应用程序在一个窗口中有很多按钮,我想将 Exclusive Touch 全部设置在一起。你对此有什么建议吗?谢谢

4

8 回答 8

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

于 2012-12-29T11:07:35.913 回答
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 调用这个函数

于 2014-02-20T02:59:08.757 回答
2

您是否只是在寻找一种简单的方法来一次设置它们?

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

[buttonArray setValue:[NSNumber numberWithBool:YES] forKey:@"exclusiveTouch"];

然后 NSArray 将对数组中的每个项目调用相同的方法。

于 2012-08-12T04:43:54.763 回答
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];
    }
}

资源

于 2012-08-12T13:39:00.223 回答
1

如果这些按钮都在同一个视图中,您可以遍历视图的子视图,测试特定的子视图是否是一个按钮(或者如果您有一组,则测试一个标签)并在每个上设置 ExclusiveTouch。

于 2012-08-12T04:50:16.300 回答
1

如果您想在整个应用程序中为所有 UIButtons 设置 ExclusiveTouch,那么swizzling将是您的完美解决方案。

这个答案很好地解释了这种方式:https ://stackoverflow.com/a/24534814/976246 ,它对我来说非常有效。

还可以通过这篇文章了解如何将这种 (http://nshipster.com/method-swizzling/)技术用于各种目的。

于 2014-09-02T15:58:23.317 回答
0

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

于 2013-03-13T13:28:23.550 回答
0

这是 swift 中的一些代码,它将为您的视图控制器视图中的所有按钮设置独占触摸

for button in self.view.subviews {
    if(button.isKindOfClass(UIButton)){
        (button as! UIButton).exclusiveTouch = true
    }
}
于 2015-07-03T07:04:15.513 回答