在两天的时间里问了三个问题我感觉很糟糕,但是我被困在了论坛上,我找不到答案,所以我希望有人能帮助我——我想这都是学习乐趣的一部分!
在我的程序中,我有三个视图,它们的顺序是 GridScreen -> GameScreen -> CorrectScreen。在 CorrectScreen 上,我有一个返回到 GridScreen 的按钮。
在 GridScreen 上,我有一堆按钮,用户可以按这些按钮进入 GameScreen。当用户正确回答问题时,他会从 GameScreen 转到 CorrectScreen 进行确认,然后返回到 GridScreen。
在上一个问题中,我询问如何跟踪在 GridScreen 上按下的按钮,以便当我从 CorrectScreen 回到它时,我可以用勾号替换图标。之前已经解决了,但是这样做我又产生了另一个问题。
在 CorrectScreen 中,当用户按下按钮返回时,会调用以下两个函数:
[self.gridScreen updateUserIcon:buttonThatWasPressed];
[self.gridScreen updatePoints:accumulatedpoints];
其中 updateUserIcon 是:
-(void)updateUserIcon:(UIButton *)button
{
UIButton *buttonPressed = button;
self.button1 = buttonPressed;
[self.button1 setImage:[UIImage imageNamed:@"tick.png"] forState:UIControlStateNormal];
}
updatePoints 是:
-(void)updatePoints:(int)points
{
self.currentPoints.text = [[NSString alloc]initWithFormat:@"Current points: %d", points];
}
其中 button1 是 UIButton 而 currentPoints 是 UILabel。
现在,当我在调用这两个函数后使用以下代码返回 GridScreen 时,勾选出现在我想要的按钮上,但标签没有正确更新:第一种情况:
[[[self presentingViewController]presentingViewController] dismissModalViewControllerAnimated:YES];
而如果我使用这种下一种方式,勾号根本不会出现,但标签会完美更新:第二种情况:
GridScreen *screen = [[GridScreen alloc] initWithNibName:nil bundle:nil];
screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:screen animated:YES];
(我通常使用第二种情况加载视图)。
在第一种情况下,即使我执行了以下代码:
-(void)updatePoints:(int)points
{
self.currentPoints.text = @"A";
NSLog(@"Current Points %@", self.currentPoints.text);
}
我的 NSLog 返回当前点 (null)。
解决方案与我返回 GridScreen 的第一种方法有关勾号。
如果有人可以提供帮助,我很想知道 - 我对使用 Objective-C 进行编程相当陌生,所以如果其中任何一个是“糟糕的代码”,我很高兴被告知哪里出了问题,所以我不会犯类似的错误。
再次感谢大家,这个网站非常适合提供帮助,我提前感谢您的建议。
安迪。