0

我正在为当地学校系统开发一个教育游戏,在这个游戏中,学生会看到六个数字,他们必须尝试使用​​尽可能多的数字来等于第七个数字,这些数字存储在一个名为的数组中currentHand,并且数字需要在屏幕上的按钮上显示为文本。问题是,当它们将数字组合在一起时,按钮上的值需要相应地更改。假设我添加了两个按钮,一个值为 1 的按钮和一个值为 2 的按钮,值 3 被添加到数组中,值 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;

}

对此的任何建议将不胜感激,在此先感谢。

4

1 回答 1

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;

}

于 2012-07-28T22:23:31.177 回答