NSTextField中的NSButton子视图,为什么我的按钮没有出现?

时间:2014-09-18 17:04:41

标签: objective-c macos cocoa nstextfield nsbutton

我试图将NSButton图像添加到NSTextField的最右侧。具体来说,它将是一个启动NSPopover(图形日期选择器日历)的按钮。现在,我要做的就是获取NSTextField最右侧的图像按钮。

我已经将NSTextField子类化了,这是我的代码:

@implementation myDateTextField {

- (void) awakeFromNib {
   // my image button icon is 16px by 16px
   NSRect buttonFrame = NSMakeRect(0.0f,0.0f, 16.0f, 16.0f);
   NSButton *popoverButton = [[NSButton alloc] initWithFrame: buttonFrame];

   popoverButton.buttonType = NSMomentaryChangeButton;
   popoverButton.bezelStyle = NSInlineBezelStyle;
   popoverButton.bordered = NO;
   popoverButton.imagePosition = NSImageOnly;
   [popoverButton setImage:[NSImage imageNamed:@"calendar_button.png"]];
   [popoverButton.cell setHighlightsBy:NSContentsCellMask];

   [self addSubview:popoverButton];
   NSLog(@"awakeFromNib loaded.");
}

}

在Interface Builder中,我将我的NSTextField类设置为myDateTextField,我可以确认在窗口加载时正在调用awakeFromNib。我的问题是按钮根本没有出现!

关于我可能做错的任何建议?我意识到按钮的位置可能会在文本字段中关闭,但是现在我要做的就是让它出现。

1 个答案:

答案 0 :(得分:0)

你的代码中有一个拼写错误(NSRect =,摆脱了“=”)。否则我运行这个代码,只要我有一个名为“calendar_button.png”的实际图像,它就可以正常运行。没有图像,代码仍然运行但没有显示。

尝试测试实际找到的图像:

NSImage *calImage = [NSImage imageNamed:@"calendar_button.png"];
if(calImage == nil){
    NSLog(@"Failed to find calendar image!");
}
[popoverButton setImage:calImage];

您还可以尝试将popoverButton.bordered设置为YES以查看该按钮的显示位置。