2012-02-01 63 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沒有被調用。這可能是你的問題嗎?

相關問題