【问题标题】:setHidden with NSSlider doesn't work - Objective C使用 NSLider 的 setHidden 不起作用 - Objective C
【发布时间】:2021-06-01 14:57:29
【问题描述】:

大家好,我是 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

【问题讨论】:

  • 插座连接了吗?与在 Objective-C 中引发异常的 Swift 不同,没有任何反应
  • 是的,我仔细检查了
  • 如果这应该是初始外观,我建议在 Interface Builder 中设置 hidden 标志。
  • 究竟如何?如果我在界面中设置标志,xcode 给我错误
  • 在界面 Builder 中,您连接插座的地方。

标签: objective-c cocoa nsslider


【解决方案1】:

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

以编程方式

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

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

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

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

使用界面生成器

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    相关资源
    最近更新 更多