使用 NSLider 的 setHidden 不起作用 - Objective C

Posted

技术标签:

【中文标题】使用 NSLider 的 setHidden 不起作用 - Objective C【英文标题】:setHidden with NSSlider doesn't work - 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 中,您连接插座的地方。 【参考方案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”为您完成工作后被调用的方法。

【讨论】:

以上是关于使用 NSLider 的 setHidden 不起作用 - Objective C的主要内容,如果未能解决你的问题,请参考以下文章

子类化 NSLider:需要一个解决方法来解决丢失鼠标事件(Cocoa OSX)

无法通过 setHidden 隐藏 UIImageView:

NSComboBox 动作选择器在 setHidden:YES 时触发

__NSCFString setHidden:无法识别的选择器发送到实例

Exjts4:如何将 GridPanel 中的列动态设置为隐藏

如何使整个图像比较滑块居中