intento establecer un valor para un control deslizante después de que haga clic en un botón,
pero no funciona – el regulador no se mueve. el código se ejecuta correctamente, sin errores.

Debe ser bastante simple, pero no puedo averiguar.
Versión de xCode 4.5.2

Gracias!


aquí mi código:

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;
}
  • Pruebe a establecer minimumValue y maximumValue a los valores correctos de primera
InformationsquelleAutor miholzi | 2013-01-22

7 Comentarios

  1. 7

    Creo que tu problema es que el regulador acepta valores entre 0.0 y 1.0 (valores por defecto, cambiar con _slider.maximumValue y _slider.minimumValue). Trate de establecer el valor a 0,9 en lugar de establecer los 90 (si te refieres a 90%).

    Si el control deslizante de actualizaciones, pero no es animado, uso :

    [_slider setValue:0.9 animated:YES];

    Tenga en cuenta que dado su código, usted puede necesitar usar self.slider en lugar de _slider.

    • Muchas gracias! Sí, yo tenía para establecer el mínimo y máximo valor directamente en el código, lo puse en el atributo de inspector y de alguna manera que no funciona.
  2. 1

    Comprobar Mi Respuesta

    - (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;
        }
    • Yo no voto, pero el OP quiere establecer el valor del control deslizante en el botón haga clic en no en el toque de eventos.
  3. 1

    Utilizar slider.value = 90;

    Su ViewController.h debe ser:

    #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

    Y no olvides @synthesize slider; en su ViewController.m así.

    De lo contrario, utilice self.slider.value = 90; o _slider.value = 90;

  4. 0

    Puesto que usted está utilizando el interface builder primera cosa a tener en cuenta serían: son los componentes de interfaz de usuario (regulador, botón) conectado a la IBOutlets en propietario del Archivo. Esta es la fuente más común de este tipo de problemas.

    A continuación, compruebe el máximo y el mínimo de la barra (el valor predeterminado es 0;1 – como rdurand mencionado).

    Y spider1983 es correcto también: desde el control deslizante es una propiedad, usted puede tratar como yo.control deslizante (o _slider, pero usted no debe usar la última, en este caso).

  5. 0

    creo . como usted no ha mencionado valor máximo y el mínimo del regulador ,se toma por defecto valores max y min que son de 0 a 1. Por lo que no es posible establecer un valor =90. Primer cambio de su max y min como este :

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

    ahora pruebe su cosa ,

    Slider.value =90;

Dejar respuesta

Please enter your comment!
Please enter your name here