将ViewController中的float值传递给某个Class

时间:2012-02-01 23:29:44

标签: iphone objective-c xcode ipad

我是Objective-c编程的新手,我坚持了下来。 我在viewcontroller中有uislider,在viewcontroller的头文件中有float变量。 我还有一个新的类改变了我的第二个视图的外观,我覆盖了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 个答案:

答案 0 :(得分: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

//。米

@synthesize delegate = _delegate;
...

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

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

}

然后您需要做的就是使用一对&lt;&gt;符合协议。并实施所需的方法。

此外,使用下划线重命名您的iVar(因此,而不是lineWidth,请使用_lineWidth),然后使用@synthesize lineWidth = _lineWidth

答案 1 :(得分:0)

在您的问题中,您描述了一个继承UIViewController的类ViewController。您显示接口(.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没有被调用。这可能是你的问题吗?