0

IB で作成した UISegmentedControl のテキストを変更しようとしています。これがコードです

[changeButton removeAllSegments];
[changeButton insertSegmentWithTitle:NSLocalizedString(@"Traffic",@"traffic string")  atIndex:0 animated:YES];
[changeButton insertSegmentWithTitle:NSLocalizedString(@"Satellite",@"satellite string")  atIndex:1 animated:YES];

しかし、何も起こりません: IB が付けたデフォルトのラベル ("First" と "Second") が常に表示されます。確かに、IBOUtlet を .h に入れました。

 __weak IBOutlet UISegmentedControl *changeButton;

私は何が欠けていますか?一般に、IB でコントロールを作成するとき、プログラムでアクセスするには、IBOutlet を .h に入れるのが正しい方法ですか?

4

3 に答える 3

1
__weak

ちょっと待ってください...弱い場合は、スコープの最後で割り当てが解除され、nullになります(それを作成するメソッドが戻るとき)。それを省け__weakば大丈夫です。

于 2012-11-26T09:33:11.203 に答える
0

これは、プロパティと changeButton という名前の ivar の両方を設定している場合にのみ関係します。OPからは明らかではないので、念のためここに入れておきます。

プロパティと ivar を混在させているようです。

changeButton ivar はプロパティ changeButton と同じではありません。

行を削除...

 __weak IBOutlet UISegmentedControl *changeButton;

.h から

コードを次のように変更します...

[_changeButton removeAllSegments];
[_changeButton insertSegmentWithTitle:NSLocalizedString(@"Traffic",@"traffic string")  atIndex:0 animated:YES];
[_changeButton insertSegmentWithTitle:NSLocalizedString(@"Satellite",@"satellite string")  atIndex:1 animated:YES];
于 2012-11-26T09:37:08.483 に答える
0

解決しました。問題は、上記の指示を init メソッドに記述したことです。代わりに、viewDidLoad メソッド内に移動する必要があります。

于 2012-11-26T10:01:02.937 に答える