iOS(またはより正確にはObjective-C)とプロパティについて質問があります。UISegmentedControlを備えたUIViewがあり、デフォルトでは3つのセグメントがあります。パラメータを受け入れるメッセージがあり、このパラメータに基づいて、セグメントの1つを削除したい場合があります。UIView AIでこれを行います:
MyViewController *myview = [[[MyViewController alloc] initWithNibName:@"MyViewController" nib:nil] autorelease];
[[self navigationController] pushViewController:myview animate:YES];
[myview showItem:item];
UIView Bでは、これはshowItemで発生します。
-(void) showItem:(Item*)item{
if (item.removeSegment){
[segmentControl removeSegmentAtIndex:0 animate:NO];
}
}
セグメントは、ナビゲーションコントローラーにプッシュした後でshowItemを呼び出したときにのみ削除されることに気付きました。これらの2行を入れ替えると、最初にshowItemを呼び出してからビューをプッシュしますが、UISegmentedControlには2つではなく3つのセグメントがあります。
これは間違っているように感じます。誰かが正しい順序で2つのメッセージを呼び出さないと、私のコードが壊れてしまうのは悪い習慣のようです。これを行うためのより良い方法はありますか?私は使用できるある種のプロパティライフサイクルを見てきました。ActionScript3からこれに非常に精通していますが、このテーマについては何も見つかりませんでした。
(余談ですが、AS3ではプロパティを作成し、セッターでは画面コントロールを操作せずにInvalidePropertiesを呼び出します。オブジェクト全体と子コントロールが作成されると、オーバーライドされたメソッドCommitPropertiesが呼び出されます。CommitPropertiesでチェックします。プロパティ値が変更され、これがセグメントを削除する場所である場合。)