【问题标题】:Change the displayed unit instantly after user changes it using UISegmentedControl用户使用 UISegmentedControl 更改显示单位后立即更改显示单位
【发布时间】:2012-09-16 19:39:50
【问题描述】:

我有一个 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];

}

如何让它在用户更改后立即更改显示单位?
谢谢!

【问题讨论】:

    标签: objective-c ios xcode uisegmentedcontrol


    【解决方案1】:

    viewWillAppear: 中的代码移动到单独的方法中。当用户更改设置时调用该方法。

    【讨论】:

      【解决方案2】:

      尝试在- (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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-22
        • 1970-01-01
        • 2018-08-13
        • 1970-01-01
        • 2020-11-21
        • 1970-01-01
        相关资源
        最近更新 更多