【发布时间】:2012-08-12 04:00:35
【问题描述】:
我的应用在一个窗口中有许多按钮,我想将它们全部设置为 Exclusive Touch。你对此有什么建议吗?谢谢
【问题讨论】:
我的应用在一个窗口中有许多按钮,我想将它们全部设置为 Exclusive Touch。你对此有什么建议吗?谢谢
【问题讨论】:
有一种方法可以为您的应用中的所有按钮设置独占触摸,可能会有所帮助。
#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@:");
}
【讨论】:
您是否只是在寻找一种简单的方法来一次设置它们?
如果你有一个数组中的所有按钮(例如,它们都连接到同一个 IBOutletCollection),你可以使用键值编码来设置数组的 ExclusiveTouch 属性:
[buttonArray setValue:[NSNumber numberWithBool:YES] forKey:@"exclusiveTouch"];
NSArray 然后将对数组中的每个项目调用相同的方法。
【讨论】:
-(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 调用这个函数
【讨论】:
如果这些按钮都在同一个视图中,您可以遍历视图的子视图,测试特定的子视图是否为按钮(如果有一组,则测试标签)并在每个上设置 ExclusiveTouch。
【讨论】:
我刚刚找到了答案:
#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];
}
}
【讨论】:
如果您想为整个应用程序中的所有 UIButtons 设置 ExclusiveTouch,method swizzling 将是您的完美解决方案。
这个答案很好地解释了方法:https://stackoverflow.com/a/24534814/976246,它对我来说非常有效。
还可以通过本文了解this (http://nshipster.com/method-swizzling/) tecknique 如何用于各种用途。
【讨论】:
如果您实际添加按钮,请在添加到其超级视图之前为每个按钮向按钮[button setExclusiveTouch:YES]; 发送消息。否则,如果您使用的是 xib,则必须将相同的消息发送到 viewDidLoad 或 loadView 中的按钮。
【讨论】:
这里是 swift 中的一些代码,它将为您的视图控制器视图中的所有按钮设置独占触摸
for button in self.view.subviews {
if(button.isKindOfClass(UIButton)){
(button as! UIButton).exclusiveTouch = true
}
}
【讨论】: