Передача значения с плавающей точкой из ViewController в некоторый класс - PullRequest
0 голосов
/ 02 февраля 2012

Я новичок в объективном программировании и застрял. У меня есть uislider в моем viewcontroller и переменная с плавающей точкой в ​​заголовочном файле viewcontroller. У меня также есть новый класс, который меняет внешний вид моего второго представления, я перезаписал drawRect.

Я просто беру значение slider.value и сохраняю его в своей переменной float, затем пытаюсь получить доступ к переменной float в моем классе, потому что эта переменная определяет ширину линий, которые я хочу нарисовать.

заголовочный файл моего контроллера представления

@interface ViewController : UIViewController 
{
float lineWidth;
}

@property float lineWidth;
-(float)changingline;
@end

viecontroller.m // sliderForLine = UISlider

- (IBAction)valuechangedForLine:(UISlider *)sender 
{

float sliderValue = sliderForLine.value;
lineWidth = sliderValue;
[self changingline];

}
-(float)changingline
{   
NSLog(@"%f", lineWidth);

return lineWidth;
} 

NSLog говорит, что в lineWidth есть значение

класс, который определяет, как должен выглядеть второй UIView

#import "ViewController.h"

ViewController *oldView = [[ViewController alloc] init];
CGContextSetLineWidth(ctx, oldView.lineWidth);
NSLog(@"%f",oldView.lineWidth);

и здесь, во втором классе, NSLog всегда говорит 0.

Я в замешательстве, я даже не знаю сейчас, почему я использую - (недействительно) подменыш :))

Все, что я знаю, - это то, что мне не хватает основного момента, как передавать значения между классами, может кто-нибудь объяснить мне, что я делаю неправильно?

Заранее спасибо:]

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Вы НУЖНЫ (не хотите) делегат для этого. Попробуйте что-то вроде этого:

заголовочный файл моего контроллера представления

@protocol ViewControllerDelegate <NSObject>

@required

-(void)valueChanged:(float)value;

@end

@interface ViewController : UIViewController 
{
float lineWidth;
id<ViewControllerDelegate> _delegate;
}

@property float lineWidth;
@property (nonatomic, assign) id<ViewControllerDelegate> delegate;
-(float)changingline;
@end

// м.

@synthesize delegate = _delegate;
...

- (IBAction)valuechangedForLine:(UISlider *)sender 
{

float sliderValue = sliderForLine.value;
lineWidth = sliderValue;
[self.delegate valueChanged:lineWidth];

}

Тогда все, что вам нужно сделать, это согласовать протокол с парой этих <> и реализовать требуемый метод.

Кроме того, переименуйте свой iVar с подчеркиванием (поэтому вместо lineWidth используйте _lineWidth), затем @synthesize lineWidth = _lineWidth

0 голосов
/ 02 февраля 2012

В своем вопросе вы описываете класс ViewController, который является подклассом UIViewController.Вы показываете интерфейс (.h) и показывает два метода из реализации (.m).Вы показываете код, в котором размещается и инициализируется новый объект класса (oldView).Однако вы не показываете, как инициализируется новый объект класса (вы не показываете его метод init).

lineWidth является свойством объекта oldView, и вы ссылаетесь на него сразу после инициализации oldView в следующих строках:

ViewController *oldView = [[ViewController alloc] init]; 
CGContextSetLineWidth(ctx, oldView.lineWidth); 
NSLog(@"%f",oldView.lineWidth); 

Тем не менее, нигде не показано, где значениеlineWidth инициализируется.Может быть, вы не инициализировали это.Может быть, - (IBAction)valuechangedForLine:(UISlider *)sender не позвонили.Может ли это быть вашей проблемой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...