使用 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
方法,那么还有另一种方法可以正确地进行操作,是时候重新开始阅读了:)。
使用界面生成器
通过在声明前输入IBOutlet
或IBAction
,您只需提示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:无法识别的选择器发送到实例