Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 更改UISegmentedControl的选定段_Iphone_Ios_Objective C_Ios6 - Fatal编程技术网

Iphone 更改UISegmentedControl的选定段

Iphone 更改UISegmentedControl的选定段,iphone,ios,objective-c,ios6,Iphone,Ios,Objective C,Ios6,在我的ModeViewController ModeViewController.h: @property (weak, nonatomic) IBOutlet UISegmentedControl *Segment; - (IBAction)switchMode:(id)sender; - (IBAction)switchMode:(id)sender { //I Tried this way UISegmentedControl *segmentedControl

在我的
ModeViewController

ModeViewController.h:

@property (weak, nonatomic) IBOutlet UISegmentedControl *Segment;
- (IBAction)switchMode:(id)sender;
- (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];

}
ModeViewController.m:

@property (weak, nonatomic) IBOutlet UISegmentedControl *Segment;
- (IBAction)switchMode:(id)sender;
- (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
并返回,它将只显示默认选定的段!有什么想法吗?

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


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


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

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

这将适用于您。

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

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

这对你有用。

问题

这里的问题是,当一个Viewcontroller以模式呈现时,它内部的属性只有在它被解除之前的生存期

检查您的代码将有一个viewcontroller的实例化,它将为您提供一个新实例,在这个新实例中,将显示nib集合值中的段控件(或您在
viewDidload
视图中设置的任何控件)

解决方案

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

  [self.segment setSelectedSegmentIndex:storedIndex];
出于存储的目的,有不同的选项

  • appDelegate中的全局变量
  • NSUserDefaults
  • 核心数据
  • Sqlite
  • 普利斯特
  • 文本文件
  • 最简单的一个是第一个,但是如果您已经实现了其中的任何一个,那么这是一个相当大的选择


    快乐编码:)

    问题

    这里的问题是,当一个Viewcontroller以模式呈现时,它内部的属性只有在它被解除之前的生存期

    检查您的代码将有一个viewcontroller的实例化,它将为您提供一个新实例,在这个新实例中,将显示nib集合值中的段控件(或您在
    viewDidload
    视图中设置的任何控件)

    解决方案

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

      [self.segment setSelectedSegmentIndex:storedIndex];
    
    出于存储的目的,有不同的选项

  • appDelegate中的全局变量
  • NSUserDefaults
  • 核心数据
  • Sqlite
  • 普利斯特
  • 文本文件
  • 最简单的一个是第一个,但是如果您已经实现了其中的任何一个,那么这是一个相当大的选择


    快乐编码:)

    该属性需要是
    strong
    。他在使用
    IBOutlet
    weak
    很好该属性需要是
    strong
    。他在使用
    IBOutlet
    weak
    很好我的AppDelegate中有一个NSInteger,我将索引保存在其中!每次进入ViewDidLoad时,我都会设置SelectedSegments,我的AppDelegate中有一个NSInteger,我会将索引保存在其中!每次进入ViewDidLoad时,我都会设置selectedSegment