我正在为当地学校系统制作教育游戏,在这个游戏中,学生会看到六个数字,他们必须尝试使用尽可能多的数字,等于第七个数字,数字存储在一个名为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;
}
对于这方面的任何建议都将非常感谢,谢谢先进。
答案 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;
}