0

我正在我的应用程序中创建搜索功能,但在为我的 UISlider 计算代码时遇到了一些麻烦。滑块在情节提要中创建并连接起来。我有一个带有字典数组作为信息源的 .plist。字典包含有关葡萄酒的信息。


  • 滑块应表示字典中“价格”键的值。我为它选择了数字,所以其中一些就像 78,900000000001。换句话说,他们需要两位小数的格式。

  • minimumValue = 字典中的最小值,向下舍入到最接近的 10(如果最小值 = 67,90,则 minimumValue = 60),如果这不是太复杂的话。

  • maximumValue = 最大值,但四舍五入到最接近的 10。

  • 供用户设置可选的最低价格,因此默认位置应为 minimumValue。

  • 我希望它在滑动时步进 5 个数字,例如 70、75、80、85、90 等


到目前为止,这是 UISlider 的代码:

- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.title = @"Search";

NSString *path = [[NSBundle mainBundle] pathForResource:@"Wines" ofType:@"plist"];
allObjectsArray = [[NSMutableArray alloc] initWithContentsOfFile:path];

minSlider.continuous = YES;
[minSlider setMinimumValue: ]; // Lowest value rounded down to closest 10
[minSlider setMaximumValue: ]; // Highest value rounded up to closest 10

[minSlider addTarget:self
           action:@selector(minValueChanged:) 
 forControlEvents:UIControlEventValueChanged];

minText.text = minSlider.minimumValue // <--- or something like that
}

- (void)minValueChanged:(UISlider*)sender
{
 // And something here for change of value and text field
minText.text = current slider value
}

你能帮我完成这个吗?在询问之前,我是根据从研究中学到的知识开始的。:)

4

1 回答 1

1

这有点取决于你的 plist 的结构,但你没有告诉我们......我假设它看起来像

<array>
  <dict>
    <key>name</key>
    <string>Bordeaux</string>
    <key>price</key>
    <real>75.40</real>
  </dict>
  <dict>
    <key>name</key>
    <string>Chardonnay</string>
    <key>price</key>
    <real>29.90</real>
  </dict>
</array>

这是您确定最小值和最大值的方法:

NSNumber *minValue = [allObjectsArray valueForKeyPath:@"@min.price"];
NSNumber *maxValue = [allObjectsArray valueForKeyPath:@"@max.price"];

这是你如何四舍五入的数字:

float roundedDown = ((int)[minValue floatValue]/10)*10.0;
float roundedUp = ((int)[maxValue floatValue]/10)*10.0 +10;

这是设置滑块最小值的方式:

minSlider.minimumValue = [minValue floatValue];

这是使标签仅显示 5 的倍数的方法:

-(void)minValueChanged:(UISlider*)sender {
    minText.text = [NSString stringWithFormat:@"%.0f", 
       5.0 * ((int) (sender.value / 5) + 0.5)];
}
于 2012-08-02T01:18:49.280 回答