4

UISwitchのテキストを変更しようとしています。Webサイトのサンプル(UISwitchのテキストの変更)は正常に機能しますが、xcodeを3.2.5およびiOS 4.2にアップグレードすると、テキストを変更するために関数が呼び出されたときにアプリケーションがクラッシュします。私はウェブサイトから次の例を使用しています。

例えば。

((UILabel *)[[[[[[_agreeAgb subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:0]).text = @"Foo";
((UILabel *)[[[[[[_agreeAgb subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:1]).text = @"Bar";

スローされる例外は、nullオブジェクトが検出されたためです。

ありがとう。

4

5 に答える 5

14

これをしないでください。フレームワークコントロールのプライベートビュー階層の操作は完全にサポートされておらず、OSアップデートとの非互換性を引き起こす可能性があります。特に、コードは階層の検証をまったく行わないため、サブビューの数またはタイプが期待したものと一致しない場合、非常に簡単にクラッシュする可能性があります。

于 2011-01-26T20:09:10.180 に答える
7

here のこのコードで4.2で成功しました。カスタマイズされた UISwitch と同じように見える効果を実現するために、UISlider (UISwitch ではありません) をサブクラス化します。

于 2011-02-03T17:06:36.573 に答える
1

TEXT を変更する方法はまだサポートされていないようですが、iOS 6 で導入されたonImageおよびプロパティを設定することで、表示される内容を変更できます。offImage

http://developer.apple.com/library/ios/documentation/uikit/reference/UISwitch_Class/Reference/Reference.html

于 2013-01-25T21:15:46.230 に答える
0

カスタマイズ可能なオープン ソースの UISwitch の代替品を使用してみてください。

これはかなり良いようです: GitHub の DCRoundSwitch ですが、それが機能しない場合、GitHub には他にもたくさんあります。

このタイプのアプローチには、スイッチの機能と描画自体を実装し、コア機能の UIControl 基本クラスのみに依存するため、同じ非互換性の問題はありません。時々更新する必要があるのは、使用しているライブラリ (DCRoundSwitch) だけですが、UIControl や Quartz 描画などの基本機能は確立されており、ほとんど変更されないため、これはまれで最小限のリスク要因と見なすことができます。 .

于 2013-04-04T20:43:15.077 に答える
0

XCode Beta 4 の最新バージョンでは、UISwitch でテキストを変更するためのサポートが追加されました。また、どのようなスタイルがあるかを調査していない SwtichStyle もあります。

于 2020-08-11T17:33:56.760 に答える