2 日間で 3 つの質問をするのは気分が悪いですが、行き詰まってフォーラムを検索しても答えが見つからなかったので、誰かが私を助けてくれることを願っています。
私のプログラムには、GridScreen -> GameScreen -> CorrectScreen の順序で 3 つのビューがあります。CorrectScreen には、GridScreen に戻るボタンがあります。
GridScreen には、ユーザーが押すと GameScreen に移動できるボタンがたくさんあります。ユーザーが質問に正しく答えると、確認のために GameScreen から CorrectScreen に移動し、GridScreen に戻ります。
以前の質問で、GridScreen で押されたボタンを追跡する方法を尋ねたので、CorrectScreen から戻ったときにアイコンを目盛りに置き換えることができます。それは以前に解決されましたが、そうすることで別の問題が発生しました。
CorrectScreen では、ユーザーがボタンを押して戻ると、次の 2 つの関数が呼び出されます。
[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 です。
ここで、2 つの関数を呼び出した後、次のコードを使用して GridScreen に戻ると、必要なボタンに目盛りが表示されますが、ラベルが正しく更新されません: 最初のケース:
[[[self presentingViewController]presentingViewController] dismissModalViewControllerAnimated:YES];
これを次の方法で使用すると、目盛りはまったく表示されませんが、ラベルは完全に更新されます。
GridScreen *screen = [[GridScreen alloc] initWithNibName:nil bundle:nil];
screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:screen animated:YES];
(私は通常、2 番目のケースを使用してビューを読み込みます)。
最初のケースでは、次のコードを実行したとしても:
-(void)updatePoints:(int)points
{
self.currentPoints.text = @"A";
NSLog(@"Current Points %@", self.currentPoints.text);
}
私の NSLog は現在のポイント (null) を返します。
解決策は、GridScreen に戻る最初の方法と関係があります。実際にはビューを再度ロードしませんが、2 番目の方法ではロードしますが、スコアを正しく更新するために何をする必要があるのか 理解できません。ダニ。
誰かが助けてくれるなら、私は知りたいです-私はObjective-Cでのプログラミングにかなり慣れていないので、これのいずれかが「悪いコード」である場合、何が間違っているかを教えてくれることを嬉しく思います。
皆様に改めて感謝いたします。このサイトは素晴らしい手助けをしてくれます。事前にアドバイスをいただければ幸いです。
アンディ。