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 } }