我的应用程序在一个窗口中有很多按钮,我想将所有这些按钮设置在一起。你有什么建议吗?感谢
答案 0 :(得分:5)
有一种方法可以为应用中的所有按钮设置独占触摸,可能会有所帮助。
#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@:");
}
答案 1 :(得分:2)
您是否正在寻找一种简单的方法来立即设置它们?
如果您拥有数组中的所有按钮(例如,它们都连接到相同的IBOutletCollection),您可以使用键值编码来设置数组的exclusiveTouch属性:
[buttonArray setValue:[NSNumber numberWithBool:YES] forKey:@"exclusiveTouch"];
然后,NSArray将对数组中的每个项调用相同的方法。
答案 2 :(得分:2)
-(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
调用此函数答案 3 :(得分:1)
如果这些按钮都在同一视图中,您可以循环浏览视图的子视图,测试特定子视图是否为按钮(或者如果您有一组则测试标记)并在每个按钮上设置exclusiveTouch。
答案 4 :(得分:1)
我刚刚找到了答案:
#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];
}
}
答案 5 :(得分:1)
如果您想在整个应用程序中为所有UIButton设置exclusiveTouch 方法调整将是您的完美解决方案。
这个答案很好地解释了这个问题:https://stackoverflow.com/a/24534814/976246,它对我来说非常适合。
另请阅读本文,了解this (http://nshipster.com/method-swizzling/) tecknique如何用于各种目的。
答案 6 :(得分:0)
如果要以实际方式添加按钮,则在添加到其超级视图之前,为每个按钮向按钮[button setExclusiveTouch:YES];
发送消息。否则,如果您使用的是xib,则必须将相同的消息发送到viewDidLoad或loadView中的按钮。
答案 7 :(得分:0)
以下是swift中的一些代码,它们将为viewcontroller的视图中的所有按钮设置独占触摸
int timerinterval = (int) Toolkit.getDefaultToolkit().
getDesktopProperty("awt.multiClickInterval");
final Timer timer = new Timer(timerinterval, new ActionListener()
{
public void actionPerformed(ActionEvent acEvt)
{
internalFrame2.setVisible(false);
}
});
jb.addMouseListener(new MouseAdapter()
{
public void mouseClicked(final MouseEvent evt)
{
System.out.println("Button " + evt.getClickCount());
timer.setRepeats(false);
timer.start();
if (evt.getClickCount() > 1)
{
timer.restart();
}
}
});