Kişiye bir dosya seçmesini isteyen bir pencere açmaya çalışıyorum ve sonunda yaptım. Sorun şu ki, Xcode kullanmakta olduğum yöntemin kullanımdan kaldırılmasından şikayet ediyor. class reference'a baktım, ancak "çalışan paneller" bölümünün altındaki her şey Mac OS 10.6'dan itibaren kullanımdan kaldırıldı. Şimdi kullanmam gereken farklı bir sınıf var mı? Aşağıda gösterilen gibiNSOpenPanel - Her şey kullanımdan kaldırıldı mı?
cevap
olarak bildiğim kadarıyla, sen runModal
yöntemi kullanabilirsiniz:
NSOpenPanel *openPanel = [[NSOpenPanel alloc] init];
if ([openPanel runModal] == NSOKButton)
{
NSString *selectedFileName = [openPanel filename];
}
10.6, bu sınıflara birkaç değişiklik yoktu. Avantajlardan biri şu anda blok tabanlı bir API olmasıdır.
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];
}];
Bu, 10.10'un altında kullanmak için doğru kod gibi görünüyor, ancak ARC kullanıyorsanız koru ve bırakma bitlerinden kurtulun. – smacdonald
Alternatif olarak [- beginSheetModalForWindow: completionHandler:] öğesini (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSSavePanel_Class/#//apple_ref/occ/instm/NSSavePanel/ ayrı bir açık iletişim kutusu istemiyorsanız beginSheetModalForWindow: completionHandler :). – pi3
hiçbir hızlı cevaplar olmadığından bu soruyu yararlı altı yıl sonra ve burada hızlı bir çözüm nasıl bulduğunu görünce: Burada
o nasıl kullanılacağı hakkında bir kod parçacığı olduğunu.İki örnek, biri bağımsız bir pencere, diğeri ise bir sayfa olarak bulacaksınız. o `NSOpenPanel` en üst sınıf olan` NSSavePanel` tarafından uygulanır, çünkü bu yöntemi bulamadık
Swift 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
}
}
}
Yani '.begin' bir tamamlama işleyicisi. Gelecekte yapılacaklar için: Ayrıca şunları yapabilirsiniz: 'yanıtı ver = panel.runModal(); eğer yanıt == NSApplication.ModalResponse.OK {/ * panel.url ile bir şeyler yap * /}' Ayrıca .CANCEL için de çalışır – eonist
- 1. Enum.ToString() kullanımdan kaldırıldı mı?
- 2. LOGIN_REDIRECT_URL kullanımdan kaldırıldı mı?
- 3. project.json kullanımdan kaldırıldı mı?
- 4. getActionView kullanımdan kaldırıldı mı?
- 5. Kullanımdan kaldırıldı .getWidth, kullanımdan kaldırılmış olmasına rağmen kullanımdan kaldırıldı
- 6. Hash Rocket kullanımdan kaldırıldı mı?
- 7. Android: showAsAction kullanımdan kaldırıldı mı?
- 8. kCGColorSpaceGenericRGB iPhone'da kullanımdan kaldırıldı mı?
- 9. authenticateWithCompletionHandler: kullanımdan kaldırıldı: iOS 6.0'da ilk kullanımdan kaldırıldı
- 10. <noscript> etiketi kullanımdan kaldırıldı mı?
- 11. MPMoviePlayerController, şu anda kullanımdan kaldırıldı mı?
- 12. SBJson iOS ayrıştırıcı yöntemleri kullanımdan kaldırıldı mı?
- 13. TabListener neden kullanımdan kaldırıldı?
- 14. Android setOnMyLocationChangeListener kullanımdan kaldırıldı
- 15. dismissModalViewControllerAnimated kullanımdan kaldırıldı
- 16. C++ işaret enum değeri kullanımdan kaldırıldı mı?
- 17. /Usr/local/Library/Contributions/Kullanımdan kaldırıldı mı?
- 18. Ya-yada işleci kullanımdan kaldırıldı mı?
- 19. Google Gadget api kullanımdan kaldırıldı mı?
- 20. "Süper" anahtar kelime Groovy'de kullanımdan kaldırıldı mı?
- 21. mongodb 'updateMany' işlevi kullanımdan kaldırıldı mı?
- 22. locationManager Swift 3'te kullanımdan kaldırıldı mı?
- 23. LINQ to SQL kullanımdan kaldırıldı mı?
- 24. JavaServer Faces 1.2 kullanımdan kaldırıldı mı?
- 25. Swift 3'te setTimer kullanımdan kaldırıldı mı?
- 26. Tüm önyükleme kesme noktaları kullanımdan kaldırıldı mı?
- 27. Livequery kullanımdan kaldırıldı
- 28. NedenJavaLetterOrDigit kullanımdan kaldırıldı?
- 29. Kullanımdan kaldırıldı: İşlev bölme() kullanımdan kaldırıldı. Bu ifade nasıl yazılır?
- 30. 'initWithFrame: reuseIdentifier' kullanımdan kaldırıldı
@Cole nedenidir. +1 – ughoavgfhw
Ah, teşekkürler Jesse ve @ughoavgfhw. – Cole
Aynı şey diğeri için doğrudur, bir sayfayı bir sayfa olarak çalıştırma yöntemi de dahil olmak üzere, bir kaydetme veya açık paneli çalıştırmada daha iyi yollar. –