我有一个UIButtons的IBOutletCollection:
@property (nonatomic, retain) IBOutletCollection(UIButton) NSMutableArray *Buttons;
使用ibaction我会在触地事件后永久更改突出显示的状态。
这个问题与此非常相似: IBOutletCollection of UIButtons - changing selected state of buttons
...但是使用for循环按钮不会改变。
我也从这里尝试了perfomselector方法:Keep iPhone UIButton Highlighted
但它不起作用。
现在我的代码:
-(IBAction)toggleButtons:(id)sender
{
NSUInteger Index = [button tag];
[[Buttons objectAtIndex:Index] setHighlighted:YES];
}
如果我改变第四行:
[[Buttons objectAtIndex:3] setHighlighted:YES];
它适用于我的集合中的第四个元素......但不适用于索引变量....
问候,phil
SelectionViewController.h
#import <UIKit/UIKit.h>
@interface SelectionViewController : UIViewController
@property (nonatomic, retain) IBOutletCollection(UIButton) NSMutableArray *Buttons;
- (IBAction)toggleButtons:(id)sender;
@end
SelectionViewController.m
#import "SelectionViewController.h"
@interface SelectionViewController ()
@end
@implementation SelectionViewController
@synthesize Buttons;
-(IBAction)toggleButtons:(id)sender
{
UIButton *button = sender;
NSUInteger Index = [button tag];
[self performSelector:@selector(doHighlight:) withObject:sender afterDelay:0];
[[Buttons objectAtIndex:Index] setHighlighted:YES];
}
- (void)doHighlight:(UIButton *)b {
[b setHighlighted:YES];
}
Okey Update 2:
现在我已将我的按钮声明为正常的IBOutlet,但这不起作用:
-(IBAction)toggleButtons:(id)sender
{
UIButton *button = sender;
[button setHighlighted:YES];
}
但如果改变它:
-(IBAction)toggleButtons:(id)sender
{
[myOutletButton setHighlighted:YES]; //Normal Outlet
}
它有效......
但为什么发件人无法做到?
问候!
更新3
这也有效:
for(id button in self.view.subviews)
{
[button setHighlighted:YES];
}
如果将选择器中的延迟时间更改为1,则状态将突出显示。我正在使用“触地”事件......我想在我触摸后按钮变为旧状态。哪个事件是对的?
答案 0 :(得分:0)
鉴于您的示例使用特定的整数,问题可能是没有为每个按钮正确设置标记属性。如果按钮是在界面构建器中创建的,则每个按钮的默认标记值为0.要检查此项,请单击按钮,然后在“属性”检查器中,向下滚动到“查看”,并查看在< em>标记字段