【问题标题】:IBOutletCollection of UIButtons wont set highlightedUIButtons 的 IBOutletCollection 不会设置为突出显示
【发布时间】:2012-09-08 16:53:28
【问题描述】:

我有一个 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];

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

问候,菲尔

更新

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

【问题讨论】:

    标签: ios5 uibutton permanent iboutletcollection setstate


    【解决方案1】:

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

    【讨论】:

    • 嘿,约翰,标签属性设置正确。我将它打印到控制台,它是正确的。可能是uibuttons的分配问题吗?我应该特别分配按钮吗?
    • 您应该检查每个按钮是否都有指向按钮 IBOutletCollection 的链接。在 Interface Builder 中,右键单击每个按钮并确保 Buttons 列在引用插座集合下。如果不是,则从它控制并拖动到 ViewController 头文件中的 IBOutlet。
    • 如果没有看到所有代码,真的不能再做任何事情了。如果您可以粘贴链接,很高兴查看
    • 您应该使用“Touch Up Inside”事件。这是按钮的默认设置。我用这个测试了你的代码,它似乎工作正常。 (顺便说一句,如果您使用 **PerformSelector 调用,则不需要调用 [[Buttons objectAtIndex ... **)
    • 仅供参考 IOS 会自动突出显示触摸按钮(在没有附加操作的按钮上尝试)。如果您使用 Touch Down 事件,则会发送您的消息,但在 Touch Up 事件上默认情况下按钮不会突出显示。如果您使用 Touch Up Inside 事件,您的消息将在系统消息之后发送,因此具有预期的效果。
    猜你喜欢
    • 1970-01-01
    • 2012-01-22
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2014-09-08
    • 2012-05-29
    相关资源
    最近更新 更多