Objective C / iPhone - как привязать UISlider к коду

Я только начинаю с 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

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

Чтобы прояснить мою цель:

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

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


person laarsk    schedule 12.12.2011    source источник
comment
Почему вы упомянули C #? Вы имеете в виду Objective-C?   -  person    schedule 13.12.2011
comment
Когда вы говорите C #, что вы на самом деле имеете в виду? Цель-C? Какао? Вы явно не имеете в виду C #.   -  person Dan J    schedule 13.12.2011
comment
Упс, извините за это. Я действительно имел в виду Objective C. Я думал, что это был краткий способ написания Objective C ... есть ли другой короткий способ написать Objective C?   -  person laarsk    schedule 13.12.2011


Ответы (3)


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

-(IBAction) changeSaturation:(id)sender;

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

Затем назначьте действие Value Changed вашего UISlider своему методу changeSaturation. Щелкните правой кнопкой мыши ползунок и перетащите значение изменено к владельцу файла и подключите их. Он должен работать.

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

-(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

Сообщите мне, если это сработает.

person Rafa de King    schedule 12.12.2011
comment
Хорошо, спасибо, теперь это работает, однако значение, возвращаемое в NSLog, по-прежнему равно 0,0000000, а текст в UILabel не изменится ... - person laarsk; 13.12.2011
comment
Код выполняется нормально, но значение возвращает 0,0000000, а метка не меняется: S - person laarsk; 13.12.2011
comment
Ах, спасибо вам большое! Ползунок наконец выводит правильные данные ... Однако ... UILabel все равно не изменится ... Нужно ли мне его еще к чему-то подключать? - person laarsk; 13.12.2011
comment
Да, вам тоже нужно подключить ярлык. Я обновил ответ. Вам нужно добавить ключевое слово IBOutlet и связать этикетку с выходом в Интерфейсном Разработчике. - person Rafa de King; 13.12.2011
comment
Да ... Вот тут-то и возникает проблема: я не могу подключить его в Interface Builder ... Когда я просматриваю файл XIB и переключаюсь в режим с костюмом на кнопке [как бы там ни было] и у меня выбор установлен на автоматический, правая область пуста ... Когда я переключаюсь на ручной и открываю файл ViewController.h, я все еще не могу нарисовать линию ... - person laarsk; 13.12.2011
comment
Вы можете сделать это по-другому, щелкните свой XIB, справа выберите конец метки и щелкните правой кнопкой мыши. Щелкните пункт «Новый источник ссылок» (или что-то в этом роде) и перетащите его в поле «Владелец файла». Вы должны иметь возможность связать его со своим лейблом в коде. Если не забыли добавить ключевое слово IBOutlet перед UILabel в файле заголовка. - person Rafa de King; 13.12.2011
comment
Основной XIB или другой? Из другого я не могу подключить к чему-либо ссылочную розетку ... Когда я делаю это из основного, я получаю UIApplication как IBOutlet: / также это код из моего основного xib: #import <UIKit/UIKit.h> @class iSaturateViewController; @interface iSaturateAppDelegate : NSObject <UIApplicationDelegate> { UIWindow *window; iSaturateViewController *viewController; } @property (nonatomic, retain) IBOutlet UIWindow *window; @property (nonatomic, retain) IBOutlet iSaturateViewController *viewController; @end - person laarsk; 13.12.2011
comment
Не основной xib, а iSaturateViewController xib (тот, где у вас есть UILabel). - person Rafa de King; 13.12.2011
comment
Оттуда я не могу ничего подключить к коду ..., как я уже сказал: автоматически правое окно пусто, и при установке файла .h там все еще не позволяет мне что-либо подключать ... - person laarsk; 13.12.2011
comment
Думаю, вы неправильно выставили свои розетки в интерфейсе. Вот почему они не появляются, когда вы пытаетесь их связать. Я обновил свой ответ. Если не поможет то сдаюсь :) - person Rafa de King; 13.12.2011
comment
Хммм, у меня есть свой код, как и у вас прямо сейчас ... хотя ... все еще нет изменяемой метки :( Может быть, мне нужно установить какие-то специальные параметры? Я также заметил, что метка действительно отображается сбоку, в списке объектов: img846.imageshack.us/img846/2969/screenshot20111213at254.png Раньше у меня это работало в другом приложении. Это действительно странно, но сейчас оно не работает ... Может ли это навредить, если я удалю Mainwindow.xib и переименую iSaturateViewController.xib в MainWindow.xib? - person laarsk; 13.12.2011

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

person Noah Witherspoon    schedule 12.12.2011
comment
Проблема в том, что я не могу. Когда я просматриваю файл XIB и переключаюсь в режим с костюмом на кнопке [что бы это ни называлось] и выбирал автоматический, правая область пуста ... Когда я переключаюсь на ручной и открываю ViewController.h файл, я все еще не могу нарисовать линию ... - person laarsk; 13.12.2011

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

person Apollo SOFTWARE    schedule 12.12.2011
comment
Обновлен стартовый пост, чтобы показать IBAction. Хотя что вы подразумеваете под сообщением первого респондента? - person laarsk; 13.12.2011
comment
РЕДАКТИРОВАТЬ: ха-ха, я просмотрел отправленные события, и теперь я знаю, что вы имеете в виду. То же, что сказал @ Rafał Sroka - person laarsk; 13.12.2011