Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.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
Objective c 用户使用UISegmentedControl更改显示的单元后立即更改它_Objective C_Ios_Xcode_Uisegmentedcontrol - Fatal编程技术网

Objective c 用户使用UISegmentedControl更改显示的单元后立即更改它

Objective c 用户使用UISegmentedControl更改显示的单元后立即更改它,objective-c,ios,xcode,uisegmentedcontrol,Objective C,Ios,Xcode,Uisegmentedcontrol,我有一个UISegmentedControl,用于处理温度单位(ºC/ºF)的设置。 它工作正常,但如果用户更改设置,则显示的单元将不会更改(刷新自身),除非用户导航到另一个视图控制器,然后返回到有问题的视图控制器 我正在使用 - (void)viewWillAppear:(BOOL)animated { //Gets user setting choice for Fahrenheit or Celsius NSUserDefaults *preferences = [NSUserDefaul

我有一个UISegmentedControl,用于处理温度单位(ºC/ºF)的设置。
它工作正常,但如果用户更改设置,则显示的单元将不会更改(刷新自身),除非用户导航到另一个视图控制器,然后返回到有问题的视图控制器

我正在使用

- (void)viewWillAppear:(BOOL)animated
{
//Gets user setting choice for Fahrenheit or Celsius
NSUserDefaults *preferences = [NSUserDefaults standardUserDefaults];
temperatureSetting = [[preferences valueForKey:@"temperature setting"]intValue];
//For getting the current value of temperature from the JSON data
NSInteger temp = [[conditions objectForKey:@"temperature"]intValue];
//For checking the user's setting to display either Fahrenheit or Celsius
if (temperatureSetting == 0) {
    temp = (temp * 1.8) + 32;
    temperatureLabel.text = [NSString stringWithFormat:@"%i°F", temp];
} else {
    temperatureLabel.text = [NSString stringWithFormat: @"%iºC", temp];
}
}


- (IBAction)temperatureSelection:(UISegmentedControl *)sender {
//Used to save settings
NSUserDefaults *temperaturePreference = [NSUserDefaults standardUserDefaults];
//To check which segment is selected and save the value but also remember it
if ([sender selectedSegmentIndex] == 0) {
    [temperaturePreference setInteger:0 forKey:@"temperature setting"];
    [selectedSegment setInteger:0 forKey:@"segment setting"];
} else if ([sender selectedSegmentIndex] == 1) {
    [temperaturePreference setInteger:1 forKey:@"temperature setting"];
    [selectedSegment setInteger:1 forKey:@"segment setting"];
}
//To make sure the setting is saved
[temperaturePreference synchronize];
[selectedSegment synchronize];

}
在用户更改显示单元后,如何使其立即更改显示单元?

谢谢大家!

将代码移到
视图中将出现:
到单独的方法。当用户更改设置时调用该方法。

将代码移到
视图中将出现:
到单独的方法。当用户更改设置时调用该方法。

尝试在
-(iAction)temperatureSelection:(UISegmentedControl*)sender
方法结尾之前添加该行代码

- (IBAction)temperatureSelection:(UISegmentedControl *)sender{
//..etc
temperatureSetting = [[temperaturePreferences valueForKey:@"temperature setting"]intValue];
if (temperatureSetting == 0) {
 temp = (temp * 1.8) + 32;
 temperatureLabel.text = [NSString stringWithFormat:@"%i°F", temp];
} else {
 temperatureLabel.text = [NSString stringWithFormat: @"%iºC", temp];
}
 [self.view setNeedsDisplayInRect:temperatureLabel.frame];//probably is not needed it forces the view to redraw itself as it mark as dirty
}

尝试将该行代码添加到
-(iAction)temperatureSelection:(UISegmentedControl*)sender
方法末尾之前

- (IBAction)temperatureSelection:(UISegmentedControl *)sender{
//..etc
temperatureSetting = [[temperaturePreferences valueForKey:@"temperature setting"]intValue];
if (temperatureSetting == 0) {
 temp = (temp * 1.8) + 32;
 temperatureLabel.text = [NSString stringWithFormat:@"%i°F", temp];
} else {
 temperatureLabel.text = [NSString stringWithFormat: @"%iºC", temp];
}
 [self.view setNeedsDisplayInRect:temperatureLabel.frame];//probably is not needed it forces the view to redraw itself as it mark as dirty
}