0

UISegmentedControl我有一个ModeViewController

模式视图控制器.h:

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

模式视图控制器.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

在您更改视图控制器并返回再次调用 viewDidLoad 方法后,这就是您看到默认选定索引的原因。解决此问题的方法是将选定的选定索引存储到某个应用程序委托属性中,或者您可以创建单例类以更好地设计以保留状态。并在您的 viewDidLoadMethod 中。

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

这对你有用。

于 2013-02-15T12:14:13.740 回答
2

问题

这里的问题是,当一个 Viewcontroller 以模态方式呈现时,它内部的属性只有生命周期,直到它被解雇。

检查您的代码,将有一个 viewcontroller 的实例化,它为您提供一个新实例,在这个新实例中,将显示来自 nib set 值的段控件(或您设置的任何内容viewDidloadViewWillAppear方法

解决方案

解决方案是将值存储在可以检索并在 viewDelegates 中设置为的位置

  [self.segment setSelectedSegmentIndex:storedIndex];

为了这个存储目的,有不同的选择

  1. appDelegate 中的全局变量
  2. NSUserDefaults
  3. 核心数据
  4. 方镁石
  5. 列表
  6. 文本文件

最简单的是第一个,但如果您正在实施其中任何一个,那么这已经是一个相当大的选择。

于 2013-02-15T12:44:14.800 回答
1

您需要selectedSegment在您的应用程序中将该变量设为全局变量。你可以定义它AppDelegate

iPhone,我如何 App Delegate 变量可以像全局变量一样使用?

于 2013-02-15T12:11:23.873 回答