web-dev-qa-db-ja.com

UISwitch-オン/オフからはい/いいえに変更

オンとオフのテキストラベルを「はい」と「いいえ」に変更できる方法を誰かが知っていますか。

私はそれをやった

            ((UILabel *)[[[[[[switchControl subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:0]).text = @"Yes";
        ((UILabel *)[[[[[[switchControl subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:1]).text = @"No";

ただし、iOS 4.2のリリースでは、これはサポートされていません(これはおそらくAppleとにかく推奨されていません)。

私のクライアントはyes/noスイッチを主張しています。アドバイスをいただければ幸いです!

どうもありがとう

18
krisdyson

そのためのカスタムUISwitchを実装する必要があります。または、すでに実装されているものを使用します:)( this SO question および this post を確認してください)

20
Vladimir

フラー! iOS 6以降では、オン/オフ状態に使用する画像をそれぞれ指定することができます。したがって、これを使用してYES/NO画像(または以前に制限されていたON/OFFの代わりに使用したいテキストを表す画像)を表示できます。

 if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0"))
 {
     [mySwitch setOnImage: [UIImage imageNamed:@"UISwitch-Yes"]];
     [mySwitch setOffImage:[UIImage imageNamed:@"UISwitch-No"]];
 }

画像の幅は77ピクセル、高さは27ピクセル、テキスト(州ごとに1つの画像)はその77ピクセルの幅内で水平方向の中央に配置する必要があります。私はテキストに透明な背景を使用しているので、背景のティントを引き続き使用できます。

もちろん、テキストの画像を使用するよりも、テキストを提供する方が簡単に思えますが、少なくともこの新しいオプションには感謝しています。

24
Snips

ウラジミールの答えは素晴らしいですが、私の控えめな意見では、ここにさらに良い実装があります https://github.com/domesticcatsoftware/DCRoundSwitch

カスタムテキストを設定する以外に、UISwitchのサイズと色を変更する方が簡単で、よりシャープな結果が得られます。

MITライセンスの下でリリースされています。ご覧ください!

12
Xavi Gil

次の項目でカスタムUISwitchを作成できることがわかります。

  • UIScrollView
  • UIButton
  • 2つのUILabels
  • 背景画像
  • ブール値

最初に、QuartzCore.frameworkをプロジェクトに追加し、#import <QuartzCore/QuartzCore.h>をビューコントローラに追加します。

次に、Interface Builderを使用してUIScrollViewをビューに追加します。 ScrollViewがカスタムUISwitchになります。次に、ボタンと2つのラベルをScrollViewに追加します。一方のラベルは「はい」、もう一方は「いいえ」です。

ボタンに画像を追加し、そのタイプをカスタムに設定します。これは私が使用する画像です: enter image description here

画像の青と白の領域にラベルを配置します。 ScrollViewを調整して、画像の青色の部分とサムノブを表示するのに十分な大きさにします。

次の行をviewDidLoadに追加します。

self.mySwitch.layer.cornerRadius = 13.5;

mySwitchはScrollViewの名前で、13.5はScrollViewの高さの半分です。上記のステートメントは、ScrollViewをUISwitchのように端を丸めるように変更します。

カスタムスイッチをアクティブにするには、ボタン "Touch Up Inside"イベントをIBActionに関連付ける必要があります。イベントハンドラーで使用するコードは次のとおりです。

-(IBAction)mySwitchButton:(id)sender {
    self.myValue = !self.myValue;
    CGPoint scrollPoint = CGPointMake((self.myValue)? 43.0: 0, 0.0);
    [mySwitch setContentOffset:scrollPoint animated:YES];
}

ここで、myValueはスイッチの状態を含むブール変数であり、43.0はスイッチをオフの位置にするためにイメージを移動する必要があるポイントの数です。

それだけです。

8
JSWilson

IOS 6から、UISwitchのオン/オフ状態に使用する画像を指定できますが、テキストは指定できません。これは、翻訳者がテキストだけでなく、各言語の画像テキストを提供する必要があるため、国際化が必要な場合に問題を引き起こします。さらに、UISwitchイメージのサイズは固定されているため、テキストの長さが制限されます。

上記の理由から、私はJSWilsonの答えが好きです。シンプルで柔軟です。

開発者が必要なコントロールを手動で追加する必要をなくすために、GitHubリポジトリにあるカスタムCRDScrollSwitchクラスをコーディングしました。 https://github.com/corerd/CRDScrollSwitch

0
corerd