在按钮上显示数组的元素

时间:2012-07-26 13:34:56

标签: objective-c xcode4 uibutton iboutlet iboutletcollection

我正在为当地学校系统制作教育游戏,在这个游戏中,学生会看到六个数字,他们必须尝试使用​​尽可能多的数字,等于第七个数字,数字存储在一个名为currentHand的数组,数字需要在屏幕上显示的按钮上显示为文本。问题是,当它们将数字组合在一起时,按钮上的值需要相应地改变。假设我添加了两个按钮,一个值为1的按钮和一个值为2的按钮,三个值被添加到数组中,值1和2被删除,然后一个按钮需要变为不可见而另一个需要更新值得3.我被告知尝试使用IBOutletCollection,但因为我对目标C仍然很新,我不知道如何使用IBOutCollection来做到这一点,我有一个想法,创建一个会绑定的方法每个按钮到数组中的一个元素,因为列表缩小了大小,所以按钮的数量也是如此,所以如果你有数字

{1,2,3,4,5,6}

每个按钮都会分配一个值,但随着列表更改为

{1,2,3,4,11}

显示数字6的按钮将消失,保持数字5的按钮将变为11,但正如我所说,我不知道如何完成此操作。

由于我无法将图片显示为这样的新成员,因此我将其与我尝试设置IBOutletCOllection

的方式联系起来

及以下是实例化currentHand

的代码
-(NSMutableArray *) currentHand{
    if (_currentHand == nil) {
        _currentHand = [[NSMutableArray alloc]init];

    }
    self.currentHand = self.myDeck.giveHand;
    return _currentHand;

}

对于这方面的任何建议都将非常感谢,谢谢先进。

1 个答案:

答案 0 :(得分:0)

以下是解决此问题的一种方法。正如我在评论中所说的那样,当你点击按钮时(我只需要一个提供标题的原始数字)或者需要IBOutletCollection,我认为没有必要使用数组来跟踪数字。

因此,在下面的示例中,我创建了一个视图项目,向视图控制器的视图添加了6个按钮,将所有标记设置为1并将它们全部连接到一个操作方法buttonPressed:。我没有为按钮使用任何插座,因为你只需循环浏览视图的子视图就可以做你需要做的事情 - 在这个例子中标签不是真的必要,但如果你的视图中有任何其他按钮,标签将是区分这6个游戏按钮与其他任何按钮的方法。

我不确定这是你想要的样子,但试试看它是否接近。

@interface ViewController : UIViewController

@property (assign) int total;
@property (retain) UIButton *previousButton;


#import "ViewController.h"

@implementation ViewController
@synthesize previousButton,total;

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.total = 0;
    NSMutableArray *theData = [NSMutableArray arrayWithObjects:@"1",@"3",@"5",@"7",@"8",@"4",nil];
    for (id obj in [self.view subviews]) {
        if ([obj isKindOfClass:[UIButton class]] && [obj tag] == 1) {
            [(UIButton *)obj setTitle:theData.lastObject forState:UIControlStateNormal] ;
            [theData removeLastObject];
        }
    }
}

-(IBAction)buttonPressed:(UIButton *)sender {
    self.total += sender.titleLabel.text.intValue;
    [sender setTitle:[NSString stringWithFormat:@"%d",self.total] forState:UIControlStateNormal];
    self.previousButton.hidden = YES;
    sender.enabled = NO;
    [sender setTitleColor:[UIColor lightGrayColor] forState:UIControlStateDisabled];
    self.previousButton = sender;

}