我试图让一个非常基本的NSPageController工作(在书本模式,而不是历史模式)。它将成功转换一次,然后停止工作。
我怀疑我正在创建NSImageViews我错误加载,但我无法弄清楚如何。
故事板有一个SamplePageController,它保存在最初的硬编码NSImageView中。
我怀疑我在这里遗漏了一些非常明显的东西,因为我发现NSPageController的所有教程都在Objective C中并不是很快,而是倾向于关注历史视图模式。
代码是:
import Cocoa
class SamplePageController: NSPageController, NSPageControllerDelegate {
private var images = [NSImage]()
@IBOutlet weak var Image: NSImageView!
//Gets an object from arranged objects
func pageController(pageController: NSPageController, identifierForObject object: AnyObject) -> String {
let image = object as! NSImage
let image_name = image.name()!
let temp = arrangedObjects.indexOf({$0.name == image_name})
return "\(temp!)"
}
func pageController(pageController: NSPageController, viewControllerForIdentifier identifier: String) -> NSViewController {
let controller = NSViewController()
let imageView = NSImageView(frame: Image.frame)
let intid = Int(identifier)
let intid_u = intid!
imageView.image = images[intid_u]
imageView.sizeToFit()
controller.view = imageView
return controller
// Does this eventually lose the frame since we're returning the new view and then not storing it and the original ImageView is long gone by then?
// Alternatively, are we not sizing the imageView appropriately?
}
override func viewDidLoad() {
super.viewDidLoad()
images.append(NSImage(named:"text")!)
images.append(NSImage(named:"text-2")!)
arrangedObjects = images
delegate = self
}
}
答案 0 :(得分:1)
在这种情况下,您的pageController.view
设置为window.contentView
并触发警告。您需要做的是在window.contentView
中添加一个子视图,并将pageController.view
指向该点。
警告的原因是,NSPageController
创建了内容历史记录的快照(视图),它会将它们添加到与pageController.view
相同的级别,以便在它们之间进行转换:这意味着它将会尝试将它们添加到pageController.view.superview
。
如果您的pageController.view
设置为window.contentView
,则您要将window.contentView.superview
的子视图添加到not supported:
自WWDC种子以来的新功能:NSWindow从未支持客户将子视图添加到contentView以外的任何内容。
某些应用程序会将子视图添加到contentView.superview(也称为窗口的边框视图)。 NSWindow现在会在检测到这种情况时进行记录:" NSWindow警告:添加未知的子视图:"。
执行此操作的应用程序需要解决此问题,因为它会阻止10.10上的新功能正常工作。有关官方API,请参阅titlebarAccessoryViewControllers。