1

これが私のコードです(ボタンが押されたときに呼び出されるIBActionにラップされています):

if (myButton.currentTitle == @"test") {

    [myButton setTitle:@"test2" forState:UIControlStateNormal];
}

if (myButton.currentTitle == @"test2") {

    [myButton setTitle:@"test" forState:UIControlStateNormal];
}

押されたときに UIButton テキストを切り替えたい (テキスト = "test" の場合は "test2" に変更され、押された場合はテキスト = "test2" が "test" に変更される)。

myButton に IBOutlet が接続され、myButton に IBAction が接続されているため、接続に問題はないと確信しています。

何らかの理由でこれが機能していません。非常に単純なものが欠けていると確信しています。

4

5 に答える 5

2

== の代わりに isEqualToString: を使用します

于 2012-04-23T17:28:41.370 に答える
2

ifこれは、最初のステートメントが成功したときに2 番目のステートメントをスキップする制御ステートメントがないためです。でブロックに入ると"test"、 に切り替え、"test2"すぐに 2 番目の条件が成功し、 に"test2"戻ります"@test"

elseを使用してこれを修正できますが、現在の状態を新しい状態にマップする を使用して完全にスキップできますifNSArray

// This should be made static, and initialized only once
NSDictionary *nextTitle = [NSDictionary dictionaryWithObjectsAndKeys:
    @"test", @"test2", @"test2", @"test", nil];

// This line does the toggling
[myButton setTitle:[nextTitle valueForKey:myButton.currentTitle] forState:UIControlStateNormal];
于 2012-04-23T17:29:11.030 に答える
0
if ([myButton.currentTitle isEqualToString:@"test"]) {

  [myButton setTitle:@"test2" forState:UIControlStateNormal];
 }

if ([myButton.currentTitle isEqualToString:@"test2"]) {

   [myButton setTitle:@"test" forState:UIControlStateNormal];
}

うまくいけば、これはあなたを助けるでしょう...

于 2012-04-23T17:30:08.927 に答える
0

ユーザーに表示される文字列を比較することは、一般に悪い習慣と見なされます (また、i18n を実行する必要がある場合は退屈になります)。特に文字列リテラルでは、タイプミスに対して脆弱であるためです。

2 つの状態を切り替えるだけの場合は、UIControl.selectedプロパティ ( に対応UIControlStateSelected)を使用するのが最も簡単です。

// In init
[myButton setTitle:@"test" forState:UIControlStateNormal];
[myButton setTitle:@"test2" forState:UIControlStateSelected];
[myButton setTitle:@"test2" forState:UIControlStateSelected|UIControlStateHighlighted];

// Toggle
myButton.selected = !myButton.selected;

また、ボタンの画像/背景/テキストの色も切り替えることにしたときに、コードがずっときれいになります。

ちょっとした問題に注意してください。タイトルを設定しないと、ボタンが選択されて強調表示された (タッチされた) ときにUIControlStateSelected|UIControlStateHighlightedタイトルが使用されます。UIControlStateNormal

于 2012-04-23T17:51:57.347 に答える
-1

文字列を互いに比較するときは、使用してみてくださいif([str1 compare:str2] == NSOrderedSame)

于 2012-04-23T17:30:51.280 に答える