0

温度単位 (ºC/ºF) の設定を処理する UISegmentedControl があります。
正常に動作しますが、ユーザーが設定を変更した場合、ユーザーが別のビュー コントローラーに移動してから問題のビュー コントローラーに戻らない限り、表示される単位は変更されません (それ自体が更新されます)。

私は使用しています

- (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];

}

ユーザーが変更した直後に表示単位を変更するにはどうすればよいですか?
ありがとう!

4

2 に答える 2

2

内部のコードviewWillAppear:を別のメソッドに移動します。ユーザーが設定を変更したときにそのメソッドを呼び出します。

于 2012-09-16T11:31:28.090 に答える
1

- (IBAction)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
}
于 2012-09-16T11:39:50.493 に答える