2012-02-01 117 views
0

我是新来的Objective-C编程,我卡住了。 我在我的viewcontroller中有uislider,在viewcontroller的头文件中有float变量。 我也有一个新的类,它改变了我的第二个视图的外观,我覆盖了drawRect。从ViewController传递float值到某些类

我只是将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说,有线宽一些值

类指定如何第二UIView应该看起来像

#import "ViewController.h" 

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

,并在这里,在第二类中,的NSLog说,始终为0

我很困惑,我甚至不知道现在为什么我使用 - (无效)低能:)

我所知道的我错过了如何在类之间传递值的主要观点,有人可以解释我做错了什么吗?

在此先感谢:]

+0

你能否更具体地告诉你如何将float值从一个类传递到另一个类。我似乎无法理解你的设置。 – 2012-02-01 23:37:10

+0

您正在创建一个全新的'ViewController'对象,因此从未为该实例设置浮点值。您需要持有对现有视图控制器的引用,或者创建协议和相应的方法以将值传递给委托。 – Rog 2012-02-01 23:49:13

回答

1

你需要(不要)这个委托。尝试是这样的:

头文件我的视图控制器的

@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 

//.m

@synthesize delegate = _delegate; 
... 

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

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

} 

然后,所有你需要做的是符合协议与对这些<的>并实施所需的方法。

而且,用下划线重命名伊娃(所以,不是lineWidth,使用_lineWidth),然后@synthesize lineWidth = _lineWidth

+0

'//.h #import“firstViewController.h” @interface SecondView:UIView { float line; } @property float line; //.m #import“firstViewController.h” @synthesize line; - (void)valueChanged :(浮点)值 { line = value; (void)drawRect:(CGRect)rect { CGContextSetLineWidth(ctx,line); NSLog(@“%f”,line); }' nslog说0,我改变了我的firstViewController,正如你所建议的,但似乎仍然不起作用。为什么我应该为我的iVars使用下划线?我没有回复,因为我必须找到什么协议,因为我从objective-c开始。 – repoguy 2012-02-03 01:49:14

+0

抱歉格式化 – repoguy 2012-02-03 01:49:53

+0

加入[view setNeedsDisplay];在你的valuechanged方法中。 – CodaFi 2012-02-03 02:09:30

0

在你的问题,你描述一类ViewController子类的UIViewController。您将显示接口(.h),并显示实现(.m)中的两个方法。您将显示代码分配和初始化类的新对象(oldView)的位置。但是,您不会显示如何初始化新的类对象(您不显示其init方法)。

lineWidth是对象oldView的属性,你指的是你在这些行初始化oldView后:

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

然而,没有在任何地方你看哪里线宽值被初始化。也许你没有初始化它。也许- (IBAction)valuechangedForLine:(UISlider *)sender没有被调用。这可能是你的问题吗?

相关问题