我的应用在一个窗口中有很多按钮,我想将所有按钮一起设置为独占触摸。您对此有什么建议吗?谢谢
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@:"); }
字符串如果您不理解这一点,可以参考this和this。
rlcwz9us2#
您是否正在寻找一种简单的方法来一次设置它们?如果你有一个数组中的所有按钮(例如,它们都连接到同一个IBOutletCollection),你可以使用键值编码来设置数组的exclusiveTouch属性:
[buttonArray setValue:[NSNumber numberWithBool:YES] forKey:@"exclusiveTouch"];
然后,NSArray将对数组中的每个项调用相同的方法。
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中调用此函数
hl0ma9xz4#
如果这些按钮都在同一个视图中,您可以循环查看视图的子视图,测试特定的子视图是否是按钮(或者测试标记,如果您有一个标记集),并在每个子视图上设置exclusiveTouch。
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
5tmbdcev6#
如果你想在你的整个应用程序中为所有的UIButton设置exclusiveTouch,那么方法混合(methodswizzling)将是你的完美解决方案。这个回答很好地说明了这个问题:https://stackoverflow.com/a/24534814/976246,而且它对我来说非常有效。另外,阅读本文可以了解***this (http://nshipster.com/method-swizzling/)***技术如何用于各种目的。
pprl5pva7#
如果您实际添加按钮,则在添加到其超级视图之前,向按钮[button setExclusiveTouch:YES];发送消息。否则,如果您使用xib,则必须向viewDidLoad或loadView中的按钮发送相同的消息。
[button setExclusiveTouch:YES];
xam8gpfp8#
下面是swift中的一些代码,它将为视图控制器视图中的所有按钮设置独占触摸
for button in self.view.subviews { if(button.isKindOfClass(UIButton)){ (button as! UIButton).exclusiveTouch = true } }
nfg76nw09#
尽管这个问题是很多年前提出的,但这里有一个简单的方法来为所有按钮子视图设置isExclusiveTouch。这个例子显示了self.view的子视图代码。将self.view更改为您感兴趣的视图。对于现在有疑问的人来说,这似乎是一个更干净的代码。
for subview in self.view.subviews { if subview is UIButton { subview.isExclusiveTouch = true } }
9条答案
按热度按时间b1payxdu1#
有一种方法可以设置独占触摸到您的应用程序中的所有按钮,可能会有帮助。
字符串
如果您不理解这一点,可以参考this和this。
rlcwz9us2#
您是否正在寻找一种简单的方法来一次设置它们?
如果你有一个数组中的所有按钮(例如,它们都连接到同一个IBOutletCollection),你可以使用键值编码来设置数组的exclusiveTouch属性:
然后,NSArray将对数组中的每个项调用相同的方法。
q3qa4bjr3#
然后在viewDidAppear中调用此函数
hl0ma9xz4#
如果这些按钮都在同一个视图中,您可以循环查看视图的子视图,测试特定的子视图是否是按钮(或者测试标记,如果您有一个标记集),并在每个子视图上设置exclusiveTouch。
3vpjnl9f5#
我刚刚找到了答案:
Source
5tmbdcev6#
如果你想在你的整个应用程序中为所有的UIButton设置exclusiveTouch,那么方法混合(methodswizzling)将是你的完美解决方案。
这个回答很好地说明了这个问题:https://stackoverflow.com/a/24534814/976246,而且它对我来说非常有效。
另外,阅读本文可以了解***this (http://nshipster.com/method-swizzling/)***技术如何用于各种目的。
pprl5pva7#
如果您实际添加按钮,则在添加到其超级视图之前,向按钮
[button setExclusiveTouch:YES];
发送消息。否则,如果您使用xib,则必须向viewDidLoad或loadView中的按钮发送相同的消息。xam8gpfp8#
下面是swift中的一些代码,它将为视图控制器视图中的所有按钮设置独占触摸
nfg76nw09#
尽管这个问题是很多年前提出的,但这里有一个简单的方法来为所有按钮子视图设置isExclusiveTouch。这个例子显示了self.view的子视图代码。将self.view更改为您感兴趣的视图。
对于现在有疑问的人来说,这似乎是一个更干净的代码。