【问题标题】:UISlider does not redraw automaticallyUISlider 不会自动重绘
【发布时间】:2011-08-05 07:15:42
【问题描述】:

我的应用上有一个 UISlider,有时我不仅需要更新它的值,还需要更新它的 minimumValue。值已更改,但如果我调用 setValue 方法或为我的滑块分配一个新值,它具有新值,但滑块不会将自身重新绘制到它应该为这个新值所在的位置。我怎样才能重新粉刷它? 这是我更改 minimumValue 的一段代码。

if([array count] < 50)
    [sliderTamanyo setMinimumValue:2];
else if([array count] < 200)
    [sliderTamanyo setMinimumValue:3];
else
    [sliderTamanyo setMinimumValue:4];
if(sliderTamanyo.value < sliderTamanyo.minimumValue)
     self.sliderTamanyo.value = self.sliderTamanyo.minimumValue;     
[self.sliderTamanyo setNeedsDisplay];                

【问题讨论】:

  • setValue 应该这样做,我想问题是您动态更改它的 minimumValue,但没有代码谁知道。

标签: iphone objective-c cocoa-touch ipad uislider


【解决方案1】:

由于UISlider 继承自UIView,您是否可以在更新值后不直接调用[yourSlider setNeedsDisplay];

这将强制UISlider 实例完全重绘自身,因此可能会考虑您设置的新值。

编辑:

UIBarButtonItem 中嵌入UISlider 时似乎存在一些常见问题 - 请参阅this Stack Overflow question 了解更多信息。

【讨论】:

  • 我用过:[self.sliderTamanyo setValue:4 animated:YES]; [self.sliderTamanyo setNeedsDisplay];但是还是不行……
  • 您的滑块是在代码中创建的,还是通过 IB 创建的。如果是通过 IB,你确定你所有的网点都连接正确吗?
  • 我使用 IB 创建了它。我已经检查过了,它的引用插座已正确连接,但我看到我的滑块位于 UIBarButton 内,因为我已将滑块添加到工具栏中
  • 它嵌入在UIBarbuttonItem 中的事实可能是您问题的根源。请参阅this Stack Overflow 问题及相关答案
  • 我还是同样的问题。我已经包含了一些代码,我在其中更改了滑块的最小值并使用了 setNeedsDisplay 方法
【解决方案2】:

我已经通过删除滑块并将其再次添加到工具栏解决了这个问题。我用过这段代码:

NSMutableArray *items = [NSMutableArray arrayWithArray:self.toolbar.items];
id slider = [items lastObject]; 
[items removeLastObject];
self.toolbar.items = items;    
[items addObject:slider];
self.toolbar.items = items;

我已使用 id 而不是 UISlider 恢复了我的滑块,因为该滑块位于 UIBarButtonItem

【讨论】:

    猜你喜欢
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多