0

私はUISegmentedControl私の中にModeViewController

ModeViewController.h:

@property (weak, nonatomic) IBOutlet UISegmentedControl *Segment;
- (IBAction)switchMode:(id)sender;

ModeViewController.m:

- (IBAction)switchMode:(id)sender {
    //I Tried this way    
    UISegmentedControl *segmentedControl = (UISegmentedControl *) sender;
    _Segment.selectedSegmentIndex = segmentedControl.selectedSegmentIndex;


//or this way
NSInteger selectedSegment = segmentedControl.selectedSegmentIndex;
[_Segment setSelectedSegmentIndex:selectedSegment];

}

しかし、変更しViewControllerて戻ってくるとすぐに、デフォルトで選択されたセグメントのみが表示されます! 何か案が?

4

3 に答える 3

2

問題

ここでの問題は、Viewcontroller がモーダルに表示される場合、その内部のプロパティには、破棄されるまでの有効期間しかないことです。

コードを確認すると、新しいインスタンスを提供するviewcontrollerのインスタンス化が行われ、この新しいインスタンスでは、ペンセット値からのセグメントコントロールが表示されます(viewDidloadまたはViewWillAppearメソッドで設定したものは何でも)

解決

解決策は、値を取得して viewDelegates で次のように設定できる場所に値を保存することです。

  [self.segment setSelectedSegmentIndex:storedIndex];

この保存の目的のために、さまざまなオプションがあります

  1. appDelegate のグローバル変数
  2. NSUserDefaults
  3. コアデータ
  4. スクライト
  5. プリスト
  6. テキストファイル

最も簡単なものは最初のものですが、これをすでに実装している場合は、このフィールドはかなりのオプションです。

于 2013-02-15T12:44:14.800 に答える
2

ビュー コントローラを変更し、viewDidLoad メソッドが再び呼び出された後、デフォルトで選択されたインデックスが表示されるのはそのためです。これを克服する方法は、選択したインデックスをアプリのデリゲート プロパティに保存するか、状態を保持するためのより良い設計のためにシングルトン クラスを作成することです。

-viewDidLoad
{
  AppDelegate *delegate=[[UIApplication sharedAppliection]delegate];
  [_Segment setSelectedSegmentIndex:delegate.selectedIndex];
}

これでうまくいきます。

于 2013-02-15T12:14:13.740 に答える
1

selectedSegmentアプリでその変数をグローバルにする必要があります。あなたはそれを定義することができますAppDelegate

iPhone、グローバル変数のように使用できるApp Delegate変数はどうすればよいですか?

于 2013-02-15T12:11:23.873 に答える