使用值填充UISlider

时间:2012-08-01 23:25:48

标签: iphone objective-c xcode

我正在我的应用程序中创建搜索功能,但是我在查找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
}
你可以帮我完成这个吗?在我询问之前,我已根据我从研究中学到的东西开始了。 :)

1 个答案:

答案 0 :(得分: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)];
}