我有一个Cocoa应用程序,其中包含使用NSWindowController的子类创建的辅助窗口。我想设置窗口标题。记录的方法调用是setTitle:。我在窗口控制器中调用了它,如下所示:
- (void)windowDidLoad
{
// set window title
[[self window] setTitle:@"test string"];
}
这不会影响窗口的标题。
有什么建议吗?
答案 0 :(得分:18)
您可以将您的窗口与IBOutlet连接,然后更改您的代码:
[[self window] setTitle:@"test string"];
对此:
[yourWindow setTitle:@"test string"];
完整代码例如:
·H
IBOutlet NSWindow *yourWindow; //Don't forget to connect window to this
的.m
-(void)awakeFromNib {
[yourWindow setTitle:@"test string"];
}
可以在属性检查器中更改标题:
答案 1 :(得分:5)
NSWindowController类引用表明要自定义标题,您应该覆盖windowTitleForDocumentDisplayName:
方法。
答案 2 :(得分:3)
我只是用
self.window?.title = "Some String"
我在哪里创建窗口。
答案 3 :(得分:0)
在Swift中,这可以通过以下方式完成:someOutlet.title = "New Title"
以下是一个存在于窗口控制器类中的示例:
@IBOutlet weak var contentOutlet: NSWindow!
override func windowDidLoad() {
super.windowDidLoad()
contentOutlet.title = "New Title"
}
同样,请记住将插座连接到窗口,或者只是将插座从窗口拖到窗口控制器类。
答案 4 :(得分:0)
在将标题绑定到所选对象文件名时,使用最新的Xcode的基于非文档的应用程序存在相同的问题。只要没有选择,标题就会显示为“ Untitled”(无标题),这在应用程序中毫无意义。
因此,我在NSWindowController中创建了两个属性-一个属性绑定到所选对象的文件名,另一个属性绑定到Window标题。
在绑定到所选对象的属性的didSet {}方法中,我检查nil值并将title属性设置为应用程序名称。如果不是nil,则将属性设置为所选对象的文件名。
class WindowController: NSWindowController {
/// Bind this to the controllers selected objects filename property
@objc dynamic var filename: String? {
didSet {
if let name = filename {
title = name
} else {
title = "IAM2 - no selection"
}
}
}
/// Bind this to the windows title
@objc dynamic var title: String = "IAM2"
override func windowDidLoad() {
super.windowDidLoad()
self.bind(NSBindingName(rawValue: "filename"),
to: self.controller,
withKeyPath: "selectedObject.filename",
options: nil)
self.window?.bind(NSBindingName(rawValue: "title"),
to: self,
withKeyPath: "title",
options: nil)
self.window?.bind(NSBindingName(rawValue: "subtitle"),
to: controller,
withKeyPath: "rootPath",
options: nil)
}
}