2013-03-31 4 views
0

Я пытаюсь сделать свой собственный таймер обучения таймера. Теперь у меня проблема с чтением значения элемента управления UIStepper.не может прочитать значение UIStepper

Я установил int над контроллером UIStepper, который работает до сих пор.

- (IBAction)stepperChange:(id)sender { 

// converting double to int 
int temp = [[NSNumber numberWithDouble:[(UIStepper *)sender value]] intValue]; 

NSLog(@"stepper was pressed. Current values is %d", [[NSNumber numberWithDouble:[(UIStepper *)sender value]] intValue]); 

self.intervalSeconds.text = [NSString stringWithFormat:@"%i", [[NSNumber numberWithDouble:[(UIStepper *)sender value]] intValue]]; 

mainInt = [[NSNumber numberWithDouble:[(UIStepper *)sender value]] intValue]; 

} 

пока все хорошо. проблема в том, что я хочу сбросить таймер на значение UISteppers, как только оно достигнет 0. Но когда я пытаюсь прочитать степперы Value непосредственно без отправителя (id), я всегда получаю значение 0.

например

-(void)readStepperValue { 

NSLog(@"Read UIStepper control value: %f", [intervalStepper value]); 

} 

Я думаю, это просто глупая ошибка начинающих ...


Хорошо, я только что сделал супер простой тест приложение, код выглядит следующим образом:

vierContro ller.h:

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController { 

IBOutlet UIStepper *stepper; 
IBOutlet UILabel *stepperValue; 
} 

@property (nonatomic, strong) UIStepper *stepper; 
@property (nonatomic, strong) UILabel *stepperValue; 

- (IBAction)showStepperValue; 

@end 

viewController.m:

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 
@synthesize stepper, stepperValue; 

- (IBAction)showStepperValue { 
int temp = stepper.value; 
stepperValue.text = [NSString stringWithFormat:@"%i", temp]; 
[self showValue]; 
} 


- (void)showValue { 
int temp = stepper.value; 
NSLog(@"stepper.value: %i", temp); 
} 


- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
} 

- (void)didReceiveMemoryWarning 
{ 
[super didReceiveMemoryWarning]; 
// Dispose of any resources that can be recreated. 
} 

@end 

Метка получает корректно обновляется внутри метода IBAction. Но когда я называю отдельный метод (showValue), который не входит в IBAction, он не может прочитать значение контроллера ....

+0

Вы подключили переменную экземпляра 'intervalStepper' в IB, а также действие? –

+0

Я подключил шаговый контроллер к IBAction. но считывание значения контроллера не имеет ничего общего с IB, верно? –

+0

Предполагая, что я правильно понимаю код, в '-readStepperValue' похоже, что вы пытаетесь прочитать из переменной экземпляра UIStepper, называемой' intervalStepper'. Если это означает указать UIStepper, который вы создали в IB (а не программно), его также нужно подключить к IB - объявить переменную экземпляра как «IBOutlet» и подключить ее. –

ответ

0

Попробуйте это вместо этого.

viewController.h:

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController 

@property (nonatomic, strong) IBOutlet UIStepper *stepper; 
@property (nonatomic, strong) IBOutlet UILabel *stepperValue; 

- (IBAction)showStepperValue; 

@end 

viewController.m:

#import "ViewController.h" 

@implementation ViewController 

- (IBAction)showStepperValue { 
    double temp = self.stepper.value; 
    self.stepperValue.text = [NSString stringWithFormat:@"%f", temp]; 
    [self showValue]; 
} 

- (void)showValue { 
    double temp = self.stepper.value; 
    NSLog(@"self.stepper.value: %f", temp); 
} 

@end 

Избавление от Ивара, и только опираясь на свойства не только сокращает объем кода, вам нужно написать, но также помогает удалить любые ошибки привязки к iVar/property.

UPDATE: self.stepper.value - это двойной не int (но это не ваша проблема).

 Смежные вопросы

  • Нет связанных вопросов^_^