2015-06-10 14 views
6

NSControl hakkında birşeyler öğreniyorum. NSCell'un OS X 10.10 Yosemite'deki kullanımdan kaldırılmasına yol açtığının farkındayım ve bu yüzden uzaklaşan bir API kullanmamayı tercih ediyorum. Ayrıca, NSControl Sınıf Referansı, tüm hücre erişim sağlayıcılarının kullanımdan kaldırıldığını gösterir.OS X 10.10'da, NSCell olmadan bir NSControl uygulayabilir miyim?

Tüm bunları anlıyorum, ancak net olmayan şey, önerilen dersin 10.10'da NSControl alt sınıflarını yazması için önerilen yoldur. Konuyla ilgili tüm Apple kılavuzları, NSCell'un kullanımdan kaldırılmasından hiç bahsetmiyor. Sanırım eski şeyleri halledebilirim, ancak Apple bir sonraki seviyeye NSCell'un kullanımdan kaldırılmasıyla kodumu değiştirmem gerekir.

NSCell kullanmadan NSControl alt sınıfını uygulamak mümkün mü?

Bu konuyla ilgili herhangi bir kişi bana tavsiyede bulunabilir veya bağlantı verebilir mi? Bu google için zor olduğunu kanıtlıyor.

cevap

3

Bunu da denemeye çalışıyorum. Ne yazık ki tüm sorularınızı cevaplayamıyorum, ama şu ana kadar bulduğum şey.

AppKit Release Notes for OS X v10.10, orijinal olarak How to create a custom themed NSButton without subclassing NSButtonCell? numaralı soruda gördüğüm şeyin kısa bir açıklaması var.

NSCell

Mac OS X 10.10 kademeli kullanımdan kaldırma hücrelerin nihai kullanımdan kaldırma yönünde bir adım daha attı. Bir denetimin hücresine doğrudan erişim engellenir ve sürümünün bir sonraki sürümünde resmi olarak kullanımdan kaldırılmasına izin veren yöntemler. Önemli işlevselliğine hücresiz erişim sağlamak için çeşitli hücre düzeyindeki API'lar çeşitli Kontrol alt sınıflarına yükseltilmiştir. NSLevelIndicator, NSTextField, NSSearchField, NSSlider, ve NSPathControl hepsi bu amaç için yeni özelliklere sahiptir. Hücre tabanlı NSTableViews artık kullanımdan kaldırıldı ve görünüm tabanlı NSTableViews yerine kullanılmalıdır. Matris tabanlı NSBrow'lar, öğe tabanlı arayüzde lehine de kaldırılmıştır.

10.10 belgelerinde kırmızı renkte birçok NSControl yöntemi vardır. (Bu arada, eğer bu kesin olarak "kullanımdan kaldırılmış" anlamına gelirse emin değilim.)

continuous ve enabled belgelerinin işaretlemeleri yanıltıcıdır. Ben dokümanlarında üstü çizili bildirimleri de NSControl için başlık dosyası aracılığıyla baktım ve birkaç farklı şeyler oluyor orada görünmek ettik:

  1. Bu yöntem NS_DEPRECATED_MAC ile kullanımdan kaldırılmıştır:

    // Use formatters instead. See -[NSControl formatter] and -[NSControl setFormatter:]. 
    - (void)setFloatingPointFormat:(BOOL)autoRange left:(NSUInteger)leftDigits right:(NSUInteger)rightDigits NS_DEPRECATED_MAC(10_0, 10_0); 
    
  2. Bu yöntemler bir NSDeprecated kategorisinde görünür:

    @interface NSControl (NSDeprecated) 
    
    // Use formatters instead. See -[NSControl formatter] and -[NSControl setFormatter:]. 
    - (void)setFloatingPointFormat:(BOOL)autoRange left:(NSUInteger)leftDigits right:(NSUInteger)rightDigits NS_DEPRECATED_MAC(10_0, 10_0); 
    
    + (void)setCellClass:(Class)factoryId; 
    + (Class)cellClass; 
    
    - (id)cell; 
    - (void)setCell:(NSCell *)aCell; 
    - (id)selectedCell; 
    - (NSInteger)selectedTag; 
    
    - (void)setNeedsDisplay; // Use setNeedsDisplay:YES instead. 
    - (void)calcSize; 
    
    - (void)updateCell:(NSCell *)aCell; 
    - (void)updateCellInside:(NSCell *)aCell; 
    - (void)drawCellInside:(NSCell *)aCell; 
    - (void)drawCell:(NSCell *)aCell; 
    - (void)selectCell:(NSCell *)aCell; 
    
    @end 
    
  3. Bu yöntemler uygulaması "OS X v10 ile OS X v10.8 kullanılabilir."9" değil NSControl başlık dosyasında, bu yüzden onlar tamamen kaldırılmıştır varsayalım.

    -userInterfaceLayoutDirection 
    -setUserInterfaceLayoutDirection 
    
  4. Bu beyanlar önceden yöntemler vardı, ama özellikleri içine refactored edilmiş olanlar hakkında ayrıntılar için this answer bakın . isEnabled/setEnabled yöntemler Yani bu beyanlar docs üzerinde çarpı, ancak bu yanıltıcı gibidir:

    @property (getter=isContinuous) BOOL continuous; 
    @property (getter=isEnabled) BOOL enabled; 
    

Ben creati da olmadan bir NSControl alt sınıfı oluşturma hakkında herhangi iyi bilgi bulamadım Görünüşe göre NSColorWell hücresiz bir NSControl olmasına rağmen, bir NSCell alt sınıfına sahiptir.

Geçerli sert sonuç, NSControl'un NSCell için oldukça güçlü bir şekilde eşleştirilmesidir ve diğeri olmadan kullanmak mantıklı değildir. Yani bunun yerine bir NSView alt sınıf yazmayı düşünüyorum.

Ayrıca burada daha fazla bilgi ve tavsiye için teşekkür ederiz!