我是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。
我很困惑,我甚至不知道为什么我正在使用 - (无效)改变:)
我所知道的是,我忽略了如何在课堂之间传递价值的要点,有人可以解释一下我做错了吗?
提前致谢:]
答案 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
没有被调用。这可能是你的问题吗?