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