0

嗨,伙计们,我是 ObjC 的新手,我还在学习;[sliderContrast setHidden:YES](我也使用了slider.hidden = YES)不会使滑块不可见,而是在文本字段中正常工作。你知道为什么吗?我也尝试过使用属性和合成,但结果没有改变

- -界面

@interface Controller : NSWindowController{
 
    IBOutlet NSTextField *labelContrast;
    IBOutlet NSTextField *valueContrast;
    IBOutlet NSSlider *sliderContrast;
}
- (IBAction)changeContrast:(id)sender;

@end

- -执行

#import "Controller.h"

@interface Controller ()

@end


@implementation Controller

- (void)windowDidLoad {

    [super windowDidLoad];

    [labelContrast setHidden:YES];

    [valueContrast setHidden:YES];

    [sliderContrast setHidden:YES];

}

- (IBAction)changeContrast:(id)sender {
}
@end
4

1 回答 1

0

如果你为你的对象声明了指针,但你自己没有分配它们,你就不能设置任何不存在的东西。您的setHidden:方法调用最终会出现在本地 void 中,也就是无处可去。

以编程方式

如果您采用编码方式,您将首先声明、分配和启动。和

labelContrast = [NSTextField alloc] initWithFrame:NSMakeRect(x,y,w,h)];

在调用对象类的其他方法(或类似的 init 方法)之前。
之后,您可以调用对象上的方法。

几乎所有对象都继承了您可以使用的相应
-(instancetype)init或方法。-(instancetype)initWith...如果没有init给出方法,那么还有另一种方法可以正确地做,并且是重新开始阅读的时刻:)。

使用界面生成器

通过在声明前键入IBOutletor IBAction,您只需提示 Xcodes Interface Builder 在哪里连接并应用(关联)放置在 (nib,xib,storyboard) 中的对象及其在 XML 方案中的对象 ID 以引用代码。

因此,在您连接代码和 IB 中的对象后,您可以避免对该特定对象进行分配和初始化过程。请注意,在尚未实例化的对象上调用方法不起作用。这就是您在 中编码的原因- (void)windowDidLoad(void)viewDidLoad或者-(void)awakeFromNib因为这些是在“IB”为您完成工作后被调用的方法。

于 2021-06-02T04:57:32.777 回答