Цель C / iPhone - как связать UISlider с кодом - PullRequest
2 голосов
/ 13 декабря 2011

Я только начинаю с Objective C, но уже столкнулся с проблемой: Когда я делал это в прошлом, у меня не было проблем с этим: Я сделал новый UISlider, щелкнул по нему, CTRL перетащил синюю строку в код, и каким-то образом я смог прочитать его значения.

Однако сейчас я сталкиваюсь с проблемой, что я не могу больше рисовать эти линии. Пошарившись, мне удалось заставить кнопки работать, но ползунок просто не работает. мой Mainwindow.xib получил класс iSaturateViewController, iSaturateViewController.xib содержит весь интерфейс.

Как заставить работать UISlider без возможности нарисовать эту линию?

Как у меня это сейчас: (в iSaturateViewController.h)

#import <UIKit/UIKit.h>

@interface iSaturateViewController : UIViewController {
    UISlider * satSlider;
    UILabel * satLabel;
}

@property (nonatomic, retain) IBOutlet UISlider * satSlider;
@property (nonatomic, retain) UILabel * satLabel;

-(IBAction) changeSaturation:(id) sender;

@end

(в iSaturateViewController.m):

@synthesize satLabel,satSlider;

-(IBAction) changeSaturation:(id)sender {
    satLabel.text = [[NSString alloc] initWithFormat:@"Saturation:  %d ", (Float32)satSlider.value];
     NSLog(@"%f", satSlider.value);
}

В тот момент, когда NSLog показывает: 0,00000000

Кроме того, я установил метку в свойствах Identity: satSlider (слайдер) и satLabel (метка).

Просто чтобы уточнить мою цель:

Я хочу, чтобы значение ползунка (satSlider) отображалось в UILabel (satLabel) через функцию changeSaturation.

Как я могу это сделать?

Ответы [ 3 ]

6 голосов
/ 13 декабря 2011

Добавьте объявление метода:

-(IBAction) changeSaturation:(id)sender;

в заголовочный файл iSaturateViewController.h

Затем назначьте действие Значение изменено *1007* вашего UISlider для вашего метода changeSaturation . Щелкните правой кнопкой мыши по ползунку и перетащите Значение, измененное , к владельцу File и подключите их. Это должно работать.

Вы также можете попробовать это:

-(IBAction)changeSaturation:(id)sender {

     UISlider *slider = (UISlider *)sender;
     satLabel.text = [NSString stringWithFormat:@"Saturation: %f", slider.value];
     NSLog(@"Saturation: %f", slider.value);
}

Относительно UILabel - добавьте IBOutlet и подключите его в Интерфейсном Разработчике. Интерфейс должен быть таким:

#import <UIKit/UIKit.h>

@interface iSaturateViewController : UIViewController {
    IBOutlet UISlider * satSlider;
    IBOutlet UILabel * satLabel;
}

@property (nonatomic, retain) IBOutlet UISlider * satSlider;
@property (nonatomic, retain) IBOutlet UILabel * satLabel;

-(IBAction) changeSaturation:(id) sender;

@end

Дайте мне знать, если это работает.

1 голос
/ 13 декабря 2011

Похоже, что главное, что вам не хватает, это то, что розетка satSlider не подключена, поэтому ее значение равно nil. Вы связали действие ползунка с методом -changeSaturation:, но, похоже, вы также не связывали свойство satSlider с самим ползунком. Отправка сообщения (например, value в этом случае) на nil ничего не делает и возвращает 0, поэтому 0 - это значение, которое вы получаете из него. Подключите вашу розетку, перетаскивая Ctrl из свойства в коде к ползунку в вашем интерфейсе, и он должен работать.

0 голосов
/ 13 декабря 2011

Вам нужно отредактировать ваш заголовок и добавить объявление метода. Затем в IB свяжите первого респондента для значения, измененного на UISlider. Также slider.value, вам нужно прочитать статью: Установка значения интервала для UISlider

...