0

我有一个 UIButtons 的 IBOutletCollection:

@property (nonatomic, retain) IBOutletCollection(UIButton) NSMutableArray *Buttons;

通过 ibaction,我将在着陆事件后永久更改突出显示的状态。

这个问题与此非常相似: IBOutletCollection of UIButtons - changed selected state of buttons

...但是使用 for 循环按钮不会改变。

我还从这里尝试了 perfomselector 方法:保持 iPhone UIButton 突出显示

但它不起作用。

现在我的代码:

-(IBAction)toggleButtons:(id)sender
{
    NSUInteger Index = [button tag];
    [[Buttons objectAtIndex:Index] setHighlighted:YES];
}

如果我将第四行更改为:

    [[Buttons objectAtIndex:3] setHighlighted:YES];

它适用于我集合中的第四个元素......但不适用于索引变量......

问候,菲尔

更新

选择视图控制器.h

#import <UIKit/UIKit.h>

@interface SelectionViewController : UIViewController

@property (nonatomic, retain) IBOutletCollection(UIButton) NSMutableArray *Buttons;

- (IBAction)toggleButtons:(id)sender;

@end

选择视图控制器.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];
}

XIB 文件

奥基更新 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,则状态将突出显示。我正在使用“触地”事件......我想在我触碰按钮后,它会恢复到原来的状态。哪个事件是正确的?

4

1 回答 1

0

鉴于您的示例使用特定整数,问题可能是您的每个按钮的标签属性设置不正确。如果按钮是在界面生成器中创建的,则每个按钮的默认标记值为 0。要检查这一点,请单击按钮,然后在 Attributes Inspector 中向下滚动到 View 并查看标记中输入的值场地

于 2012-09-08T17:15:58.310 回答