更改UISegmentedControl的选定段

时间:2013-02-15 12:03:14

标签: iphone ios objective-c ios6

我的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并返回,它将只显示默认选定的细分!有什么想法吗?

3 个答案:

答案 0 :(得分:2)

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

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

这对你有用。

答案 1 :(得分:2)

<强>问题

这里的问题是,ViewController以模态方式呈现,其中的属性只有生命周期,直到它被解除。

检查你的代码将会有一个viewcontroller实例,它为你提供了一个新实例,在这个新实例中,将显示来自nib set值的段控件(或者你在viewDidload或{{ 1}}方法

<强>解决方案

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

ViewWillAppear

为了存储的目的,有不同的选项

  1. appDelegate中的全局变量
  2. NSUserDefaults的
  3. CoreData
  4. SQLite的
  5. 的plist
  6. TEXTFILE
  7. 最简单的是第一个,但是如果你已经实现了这个,那么这个领域是一个相当大的选择

    快乐编码:)

答案 2 :(得分:1)

您需要在应用中将变量selectedSegment设为全局变量。您可以在AppDelegate

中定义它

iPhone, how do I App Delegate variable which can be used like global variables?