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

我的应用程序在窗口中有很多button,我想将所有这些button设置为独家。 你有什么build议吗? 谢谢

有一种方法来设置您的应用程序中的所有button的独家触摸,可能会有所帮助。

#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@:"); } 

如果你不明白这一点,你可以参考这个和这个 。

你只是想找一个简单的方法来一次设置它们?

如果你有一个数组中的所有button(例如,他们都连接到相同的IBOutletCollection),你可以使用键值编码来设置数组的exclusiveTouch属性:

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

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

如果这些button都在同一视图中,则可以遍历视图的子视图,testing特定的子视图是否为button(或者如果有一组,则testing标记)并设置每个button。

我刚刚find了答案:

 #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]; } } 

资源

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

如果您想要在整个应用程序方法中设置所有UIButton的exclusiveTouch,那么使用swizzling将是您的完美解决scheme。

这个答案很好的解释了这个问题: https : //stackoverflow.com/a/24534814/976246 ,它对我来说是完美的。

另外通过这篇文章来了解这个(http://nshipster.com/method-swizzling/)tecknique可以用于各种目的。

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

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

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