我一直试图让一个窗口出现,要求人选择一个文件,我最终做到了。问题是,Xcode抱怨我正在使用的方法已被弃用。我查看了class reference,但在“运行面板”部分下的所有内容在Mac OS 10.6以前都已弃用。我现在应该使用不同的课程吗?NSOpenPanel - 不推荐使用?
回答
据我所知,您可以使用runModal
方法如下所示:
NSOpenPanel *openPanel = [[NSOpenPanel alloc] init];
if ([openPanel runModal] == NSOKButton)
{
NSString *selectedFileName = [openPanel filename];
}
在10.6,有这个班的几个变化。其中一个好处是现在有一个基于块的API。
下面是如何使用的代码片段:
NSOpenPanel *panel = [[NSOpenPanel openPanel] retain];
// Configure your panel the way you want it
[panel setCanChooseFiles:YES];
[panel setCanChooseDirectories:NO];
[panel setAllowsMultipleSelection:YES];
[panel setAllowedFileTypes:[NSArray arrayWithObject:@"txt"]];
[panel beginWithCompletionHandler:^(NSInteger result){
if (result == NSFileHandlingPanelOKButton) {
for (NSURL *fileURL in [panel URLs]) {
// Do what you want with fileURL
// ...
}
}
[panel release];
}];
这看起来像是在10.10下使用的正确代码,但是如果您使用ARC,则需要删除保留位和释放位。 – smacdonald
或者,您可以使用[ - beginSheetModalForWindow:completionHandler:](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSSavePanel_Class/#//apple_ref/occ/instm/NSSavePanel/ beginSheetModalForWindow:completionHandler :)如果你不想单独打开对话框。 – pi3
看到我是如何发现这个问题有用的六年后,由于没有迅速的答案,这里有一个快速的解决方案。
您会发现两个样本,一个作为独立窗口,另一个作为工作表。
雨燕3.0
func selectIcon() {
// create panel
let panel = NSOpenPanel()
// configure as desired
panel.canChooseFiles = true
panel.canChooseDirectories = false
panel.allowsMultipleSelection = false
panel.allowedFileTypes = ["png"]
// *** ONLY USE ONE OF THE FOLLOWING OPTIONS, NOT BOTH ***
// ********************** OPTION 1 ***********************
// use this if you want a selection window to display that is
// displayed as a separate stand alone window
panel.begin { [weak self] (result) in
guard result == NSFileHandlingPanelOKButton, panel.urls.isEmpty == false, let url = panel.urls.first else {
return
}
let image = NSImage.init(contentsOf: url)
DispatchQueue.main.async {
self?.iconImageView.image = image
}
}
// ********************** OPTION 2 ***********************
// use this if you want a sheet style view that displays sliding
// down from your apps window
panel.beginSheetModal(for: self.view.window!) { [weak self] (result) in
guard result == NSFileHandlingPanelOKButton, panel.urls.isEmpty == false, let url = panel.urls.first else {
return
}
let image = NSImage.init(contentsOf: url)
DispatchQueue.main.async {
self?.iconImageView.image = image
}
}
}
所以'.begin'是一个完成处理程序。对于将来的在线用户:你也可以这样做:'let response = panel.runModal(); if response == NSApplication.ModalResponse.OK {/ *用panel.url * /}做事''也适用于'.CANCEL' – eonist
- 1. 不推荐使用NSOpenPanel的文件名属性,还有什么其他用途?
- 2. 不推荐使用:`config.adapters.default` Sails.js
- 3. SugarCRM:不推荐使用SOAP API调用?
- 4. 调用不推荐使用的方法?
- 5. 为什么不推荐使用isJavaLetterOrDigit?
- 6. org.hibernate.cache.Cache为何不推荐使用?
- 7. DataInputStream不推荐使用readLine()方法
- 8. isascii()为何不推荐使用?
- 9. std :: iterator为什么不推荐使用?
- 10. 不推荐使用DefaultHttpClient并获取Cookie?
- 11. Spring Boot 1.4 VelocityEngineUtils不推荐使用
- 12. 为什么Logger.isInfoEnabled不推荐使用org.jboss.logging.Logger?
- 13. 不推荐使用ASP.NET Web方法
- 14. 不推荐使用:功能eregi_replace()
- 15. Eregi()不推荐使用PHP帮助?
- 16. Python不推荐使用的函数
- 17. 不推荐使用:mysql_connect()函数:注意
- 18. mapView不推荐使用的方法getZoomControls?
- 19. Object.observe()为什么不推荐使用
- 20. 为什么不推荐使用std :: strstream?
- 21. 不推荐使用:功能额日格()
- 22. PHP不推荐使用的代码?
- 23. 量角器不推荐使用getLocationAbsUr
- 24. 不推荐使用ALAssetsLibrary方法
- 25. 为什么不推荐使用struts2 FilterDispatcher?
- 26. 推荐使用SugarCRM for developer
- 27. Howto使用增量式SVD推荐系统创建推荐
- 28. 推荐
- 29. 不推荐使用getPreventDefault()。使用defaultPrevented而不是Angular JS
- 30. tidyverse:cross_d()`不推荐使用;请使用'cross_df()',而不是
@Cole的,你就不会发现这个方法的原因是因为它是由'NSSavePanel',这是'NSOpenPanel'的超类实现。 +1 – ughoavgfhw
啊,谢谢Jesse和@ughoavgfhw。 – Cole
运行保存或打开面板的其他更好的方法也是如此,包括将其中一个作为工作表运行的方法。 –