iOS:将“独占触控”设置为视图中的所有按钮

zsohkypk  于 2022-12-15  发布在  iOS
关注(0)|答案(9)|浏览(140)

我的应用在一个窗口中有很多按钮,我想将所有按钮一起设置为独占触摸。您对此有什么建议吗?谢谢

b1payxdu

b1payxdu1#

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

#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

rlcwz9us

rlcwz9us2#

您是否正在寻找一种简单的方法来一次设置它们?
如果你有一个数组中的所有按钮(例如,它们都连接到同一个IBOutletCollection),你可以使用键值编码来设置数组的exclusiveTouch属性:

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

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

q3qa4bjr

q3qa4bjr3#

-(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中调用此函数

hl0ma9xz

hl0ma9xz4#

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

3vpjnl9f

3vpjnl9f5#

我刚刚找到了答案:

#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

5tmbdcev

5tmbdcev6#

如果你想在你的整个应用程序中为所有的UIButton设置exclusiveTouch,那么方法混合(methodswizzling)将是你的完美解决方案。
这个回答很好地说明了这个问题:https://stackoverflow.com/a/24534814/976246,而且它对我来说非常有效。
另外,阅读本文可以了解***this (http://nshipster.com/method-swizzling/)***技术如何用于各种目的。

pprl5pva

pprl5pva7#

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

xam8gpfp

xam8gpfp8#

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

for button in self.view.subviews {
    if(button.isKindOfClass(UIButton)){
        (button as! UIButton).exclusiveTouch = true
    }
}
nfg76nw0

nfg76nw09#

尽管这个问题是很多年前提出的,但这里有一个简单的方法来为所有按钮子视图设置isExclusiveTouch。这个例子显示了self.view的子视图代码。将self.view更改为您感兴趣的视图。
对于现在有疑问的人来说,这似乎是一个更干净的代码。

for subview in self.view.subviews
        {
            if subview is UIButton {

                subview.isExclusiveTouch = true
            }
        }

相关问题