【问题标题】:Set slider value设置滑块值
【发布时间】:2013-01-05 11:29:52
【问题描述】:

我尝试在单击按钮后为滑块设置一个值, 但它不起作用 - 滑块不移动。代码运行良好,没有错误。

应该很简单,但我想不通。 xCode 版本 4.5.2

谢谢!


这是我的代码:

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *debugLabel;
@property (weak, nonatomic) IBOutlet UISlider *slider;

- (IBAction)slider:(id)sender;
- (IBAction)ButtonChangeValue:(id)sender;

@end

ViewController.m

#import "ViewController.h"
@interface ViewController ()
@end

@implementation ViewController
@synthesize slider;

...

- (IBAction)slider:(UISlider *)sender {
    float value = [sender value];
    self.debugLabel.text = [NSString stringWithFormat:@"Value: %f",value];
}

- (IBAction)ButtonChangeValue:(id)sender {
    slider.value = 90;
}

【问题讨论】:

  • 先尝试将minimumValuemaximumValue 设置为合适的值

标签: ios objective-c button slider


【解决方案1】:

尝试使用

    self.slider.value = 90;

而不是

    slider.value = 90;

【讨论】:

    【解决方案2】:

    我认为您的问题是滑块接受介于 0.0 和 1.0 之间的值(默认值,使用 _slider.maximumValue_slider.minimumValue 更改它们)。尝试将值设置为 0.9 而不是设置为 90(如果您的意思是 90%)。

    如果滑块更新但没有动画,请使用:

    [_slider setValue:0.9 animated:YES];
    

    请注意,根据您的代码,您可能需要使用self.slider 而不是_slider

    【讨论】:

    • 非常感谢!是的,我必须直接在代码中设置最小值和最大值,我在属性检查器中设置了它,但不知何故这不起作用。
    【解决方案3】:

    检查我的 Answer

    - (void)viewDidLoad
    {
    
     UITapGestureRecognizer *gr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(sliderTapped:)];
        [slider addGestureRecognizer:gr];
    
    }
    
     - (void)sliderTapped:(UIGestureRecognizer *)g 
        {
    
            UISlider* s = (UISlider*)g.view;
            if (s.highlighted)
                return; // tap on thumb, let slider deal with it
            CGPoint pt = [g locationInView: s];
            CGFloat percentage = pt.x / s.bounds.size.width;
            CGFloat delta = percentage * (s.maximumValue - s.minimumValue);
            CGFloat value = s.minimumValue + delta;
            [s setValue:value animated:YES];
    
            NSString *str=[NSString stringWithFormat:@"%.f",[self.slider value]];
            self.lbl.text=str;
        }
    

    【讨论】:

    • 我没有投反对票,但 OP 想在按钮点击而不是点击事件上设置滑块值。
    【解决方案4】:

    由于您使用的是界面构建器,因此首先要看的是:UI 组件(滑块、按钮)是否连接到文件所有者中的 IBOutlets。这是此类问题的最常见来源。

    然后检查滑块的最小值和最大值(默认为 0;1 - 如 rdurand 所述)。

    spider1983 也是正确的:由于滑块是一个属性,您可以将其寻址为 self.slider(或 _slider,但在这种情况下您不应该使用最后一个)。

    【讨论】:

      【解决方案5】:

      使用slider.value = 90;

      你的 ViewController.h 应该是:

      #import <UIKit/UIKit.h>
      
      @interface ViewController : UIViewController
      {
           UISlider *slider;
      }
      @property (weak, nonatomic) IBOutlet UILabel *debugLabel;
      @property (weak, nonatomic) IBOutlet UISlider *slider;
      
      - (IBAction)slider:(id)sender;
      - (IBAction)ButtonChangeValue:(id)sender;
      
      @end
      

      不要忘记你的 ViewController.m 中的@synthesize slider;

      否则,请使用self.slider.value = 90;_slider.value = 90;

      【讨论】:

        【解决方案6】:

        我认为。由于您没有提到滑块的最大值和最小值,它采用默认的最大值和最小值,即 0 到 1。因此无法设置值 = 90。首先像这样改变它的最大值和最小值:

        Slider.minimumValue = 1;
        Slider.maximumValue = 100;
        

        现在试试你的东西,

        Slider.value =90;
        

        【讨论】:

          【解决方案7】:

          对于 Swift,您可以使用:

          slider.setValue(5.0, animated: true)
          

          【讨论】:

            【解决方案8】:

            视野内

            @State private var value1: Double = 0.9
            

            然后做参考

            Slider(value: $value1)
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2019-06-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多