2011-08-17 18 views
5

Şu anda Kaka Uygulamamda yeni bir görünüm tabanlı NSOutlineView kullanmaya çalışıyorum. Bağlama kullanmıyorum, bu yüzden denetleyicimde gerekli tüm temsilci ve veri kaynağı yöntemlerini uyguladık.Görünüm tabanlı NSOutlineView üstbilgisi hücre yazı tipi sorunları

arayüz oluşturucu ben SourceList ve Tabanlı Görünüm ayarlı İçerik moda ayarlanmış bir vurgulama ile NSOutlineView ekledik. Böylece, verilen iki varsayılan tablo hücre görünümleri (tanımlayıcı olarak HeaderCell seti ve tanımlayıcı olarak DataCell set ile bir veri hücre ile bir Başlık hücresi)

Bu arabirim oluşturucu, başlık hücre görünümlerinde neye benzediği vardı veri hücre görünümleri görüşlerini sunmak için bir imaj görünümü ve doğru renk ve yazı tipi ayarlarına

ile TextField varken doğru bir gri-mavi TextField göstermek, ben şu kodu kullanın DataCell- dönmek görünüm veya bir HeaderCell görünümü ve set Buna uygun olarak, arayüz oluşturucuda ayarlanan ilgili tanımlayıcıya dayanan hücrenin metni.

- (NSView *)outlineView:(NSOutlineView *)outlineView 
    viewForTableColumn:(NSTableColumn *)tableColumn 
        item:(id)item { 


    NSTableCellView *result = nil; 

    if ([item isKindOfClass:[NSMutableDictionary class]]) { 
     result = [outlineView makeViewWithIdentifier:@"HeaderCell" owner:self]; 

     id parentObject = [outlineView parentForItem:item] ? [outlineView parentForItem:item] : groupedRoster; 
     [[result textField] setStringValue:[[parentObject allKeys] objectAtIndex:0]]; 


    } else { 
     result = [outlineView makeViewWithIdentifier:@"DataCell" owner:self]; 

     [item nickname] ? [[result textField] setStringValue:[item nickname]] : [[result textField] setStringValue:[[item jid] bare]]; 
    } 
    return result; 
} 

Her şey aşağıdaki gibi görünüyor.

Seçildiğinde, başlık hücresinin neden ne koyu, ne de doğru renkte olmasına neden olan herhangi biri bana ipucu verebilir mi?

cevap

11

-outlineView: isGroupItem: temsilci yöntemini uygulamanız ve üstbilgi satırlarınız için YES değerini döndürmeniz gerekir. Bu yazı tipini standartlaştıracak ve soldaki açıklama üçgenini sağdaki Göster/Gizle düğmesiyle değiştirecektir. Tam etkiyi elde etmek için dizginizi el ile büyük harfle yapmanız gerekir.

Yukarıdaki grup satırı temsilci yönteminin seçim stili görünümünü tamamlayıp tamamlamadığından emin değilim. Bununla birlikte, normalde başlık satırlarının -outlineView: shouldSelectItem: delegate yönteminden üstbilgi öğeleri için NO döndürerek, kaynak listelerinde seçilebilir olmasını istemezsiniz.

+1

Büyük, teşekkür bulunabilir , bu benim aradığım tam olarak buydu. Bir başkası sorunla karşılaşırsa, setFloatsGroupRows: NO öğesini kullanarak ilk grup maddesini * atlama * yukarı ve aşağı hareket ettirerek [bu gönderiye] (http: // stackoverflow) göre genişler ve daraltır.com/questions/6814620/garip-davranış-kullanarak-görünümü-tabanlı-nsoutline-sourcelist) – BinaryBucks

+0

Ben şu anda ve her şey doğru görüntüleniyor Yukarıdaki kod çalışmaları gerçekten böyle bir grup genişleyen/daraltıldığında akıcı çalışmaz örn. Bulucu. Görünümde yeni tahsis edilmiş gibi, animasyonlarda hafif ama dikkat çekici bir tıkanıklık ve oldukça ağır bir CPU yükü vardır. Eğer makeViewWithIdentifer'i tek bir tanımlayıcı ile kullanırsam, her hücrenin bir başlık hücresi (veya veri hücresi olmayan) olması için her şey akıcı bir şekilde çalışır. Herhangi bir ipucu neden? – BinaryBucks

+0

Evet, tüm floatsGroupRows özelliği yalnızca anahat görünümleri için bozuk. Tanımladığınız performans sorununu görmedim. Belki bir katman destekli süper görüntüden bir çekirdek animasyon gerileme? Dunno. –

2

Bir kaynak listesi içeren küçük bir örnek proje oluşturdum ve @ boaz-stuller'ın önerdiği gibi -outlineView:isGroupItem: yöntemini kullanıyorum. bağlamaları github

Kontrol dışarı besi/mac-quickies ait

  • Ekran öğe listesi
  • Düzenleme bir ana ayrıntı moda ürün
  • kaldırın ve eklemek ürün
  • Kullanımı. şeyler çoğu ya IB yapılır veya AppDelegate

    screenshot