IOSでボタンのテキストを変更してボタンを無効にするにはどうすればよいですか?
ナムラサさん、UIButtonのテキストと有効/無効の状態を変更する場合、次のように簡単に実行できます。
[myButton setTitle:@"Normal State Title" forState:UIControlStateNormal]; // To set the title
[myButton setEnabled:NO]; // To toggle enabled / disabled
Interface Builderでボタンを作成し、コードでそれらにアクセスしたい場合、IBAction
呼び出しへの引数として渡されるという事実を利用できます。
- (IBAction) triggerActionWithSender: (id) sender;
これはボタンにバインドでき、アクションがトリガーされたときにsender
引数にボタンを取得できます。それだけでは不十分な場合(アクション以外の場所にあるボタンにアクセスする必要があるため)、ボタンのアウトレットを宣言します。
@property(retain) IBOutlet UIButton *someButton;
その後、IBのボタンをコントローラーにバインドすることができます。NIBの読み込みコードは、インターフェイスを読み込むときにプロパティ値を設定します。
[myButton setTitle: @"myTitle" forState: UIControlStateNormal];
UIControlStateNormal
を使用してタイトルを設定します。
UIbuttonsが提供する状態にはいくつかあります。
[myButton setTitle: @"myTitle" forState: UIControlStateApplication];
[myButton setTitle: @"myTitle" forState: UIControlStateHighlighted];
[myButton setTitle: @"myTitle" forState: UIControlStateReserved];
[myButton setTitle: @"myTitle" forState: UIControlStateSelected];
[myButton setTitle: @"myTitle" forState: UIControlStateDisabled];
ボタンがUIButton
であると仮定すると:
UIButton *button = …;
[button setEnabled:NO]; // disables
[button setTitle:@"Foo" forState:UIControlStateNormal]; // sets text
UIButton
のドキュメントを参照してください。
Swift 3では、次の方法でボタンのタイトルを簡単に変更できます。
button.setTitle("Title", for: .normal)
次の方法でボタンを無効にします:
button.isEnabled = false
タイプが推測されるため、.normal
はUIControlState.normal
と同じです。
ボタンのタイトルを変更するには:
[mybtn setTitle:@"My Button" forState:UIControlStateNormal];
[mybtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
無効にする場合:
[mybtn setEnabled:NO];
タップされたときの応答としてタイトルを変更する場合は、View ControllerデリゲートのボタンのIBActionメソッド内でこれを試すことができます。これにより、ボイスチャットのオンとオフが切り替わります。ボイスチャットのセットアップについては、ここでは説明しません!
- (IBAction)startChat:(id)sender {
UIButton *chatButton = (UIButton*)sender;
if (!voiceChat.active) {
UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Voice Chat"
message:@"Voice Chat will become live. Please be careful with feedback if your friend is nearby."
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {}];
[alert addAction:defaultAction];
[self presentViewController:alert animated:YES completion:nil];
[voiceChat start];
voiceChat.active = YES;
[chatButton setTitle:@"Stop Chat" forState:UIControlStateNormal];
}
else {
[voiceChat stop];
UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Voice Chat"
message:@"Voice Chat is closed"
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {}];
[alert addAction:defaultAction];
[self presentViewController:alert animated:YES completion:nil];
voiceChat.active = NO;
[chatButton setTitle:@"Chat" forState:UIControlStateNormal];
}
}
voiceChatはもちろん音声チャットに固有のものですが、ow local booleanプロパティを使用してスイッチを制御できます。
Swift 4拡張機能付き
セットする:
// set button label for all states
extension UIButton {
public func setAllStatesTitle(_ newTitle: String){
self.setTitle(newTitle, for: .normal)
self.setTitle(newTitle, for: .selected)
self.setTitle(newTitle, for: .disabled)
}
}
そして使用:
yourBtn.setAllStatesTitle("btn title")