5

それで、私は 2013 年冬のスタンフォード iOS/Objective-C クラスの 2 番目の課題を iTunes U を通じて進めています。

カードマッチングゲームです。各カードは、ビューで UIButton として表されます。カード オブジェクトが表向きの場合、UIButton は選択状態になり、カードが裏向きの場合、UIButton はデフォルト状態になります。一致が見つかった後、カードを無効にすることもできます。

課題では、カードの裏に画像を配置するように求められます。つまり、各 UIButton は、既定の状態のときは画像を表示する必要がありますが、選択状態または無効状態のときは title プロパティのみを表示する必要があります。

十分に単純に思えます...

まず、GUI (ストーリーボード) でこれを試し、背景画像を自分の画像に設定してから、選択状態と無効状態の両方に画像がないことを確認しました。これにより、画像が表示されましたが、タイトルテキストが画像の上に表示されました。一部の検索で、この理由が明らかになりました。明示的に指示されない限り、UIButton は他のすべての UIControlStates を UIControlStateNormal にデフォルト設定します。

今、私はこれをプログラムで動作させようとしていますが、まだうまくいきません。カードであるすべての UIButtons は、NSArray (cardButtons) である IBOutletCollection にあります。viewDidLoad 関数には、すべてのボタンを通過する for ループがあります。

UIImage *cardBack = [UIImage makeSomeImage...];
for (UIButton *oneButton in cardButtons) {
[oneButton setBackgroundImage:cardBack forState:UIControlStateNormal];
[oneButton setBackgroundImage:nil forState:UIControlStateSelected];
}

それでも同じ問題が発生します。デフォルト状態の画像を確実に正常に設定していますが、シミュレーターでボタンをクリックすると、タイトルが単にその上に表示されている間、画像が残ります。

GUIとプログラムの両方で、別の画像を選択して無効な状態で表示することができます。私がしなければならないのは、追加することだけです:

[oneButton setBackgroundImage:anotherImage forState:UIControlStateSelected];

ループとすべてのボタンを選択すると、他の画像が表示されます。

私ができないこと、そして私を夢中にさせているのは、UIButtonがタイトルのみを表示するように、選択時に背景画像がないようにしようとしていることです...

編集:

理想的な解決策ではありませんが (UIButton の imageView プロパティを使用して何かが可能かもしれないと思いますが、よくわかりません)、これを機能させるためのやや凝った感じの方法を思いつきました。

最初に、使用している UIImage を cardBackImage というクラス プロパティにしました。

次に、モデルに変更が加えられるたびにすべてのカード ボタンをループする updateUI 関数に、次のコード行を追加しました。

[cardButton setBackgroundImage:(oneCard.isFaceUp ? nil : self.cardBackImage) forState:UIControlStateNormal];

したがって、カード オブジェクトが「反転」されるたびに、UIButton はそのインスタンス変数に UIImage をロードまたはアンロードする必要があります。ブレ...私が言ったように、理想的ではありませんが、うまくいきます。

4

3 に答える 3

0

ボタンの状態が変わったとき、つまり触れたときに画像を簡単に変更することをお勧めします。次のようなメソッドを書きます。

- (void)swapBackgroundImagesOfButton:(UIButton *)button
{
    UIImage *normalImage = [button imageForState:UIControlStateNormal];
    UIImage *selectedImage = [button imageForState:UIControlStateSelected];

    [button setImage:selectedImage forState:UIControlStateNormal];
    [button setImage:normalImage forState:UIControlStateSelected];
}

selected次に、ボタンの状態を設定する代わりに、画像を表示または非表示にするときに、そのメソッドを呼び出すだけです。

于 2013-03-08T22:23:03.263 に答える
0

ボタンのbackgroundImageの代わりに画像プロパティを試してみませんか?画像がある場合、タイトルテキストを非表示にします

UIButton *button;
[button setImage:[UIImage imageNamed:@"someImage"] forState:UIControlStateNormal];
于 2013-03-08T22:15:59.257 に答える