2016-04-01 16 views
1

Kimliğim kakao uygulamamda değiştirmek istedim. Başarıyı this answer numaralı telefondan takip ettim. Hatalı NSCursor arka plan kökenli NSView

Ben

bir NSView var, en başka NSView arkasında NSViewB NSViewA diyelim. NSViewA, imlecin değiştirildiği alt sınıf NSButton içerir. NSViewA ve NSViewB aynı süper görüntüye sahiptir. Böyle Yani bir şey:

- NSWindow 
    - NSViewA 
     - NSButtonSubclass 
    - NSViewB 

Benim sorunum olduğunda NSViewB gösterildiğini ve imleç NSViewB ontop olmakla NSButton belirtilenden için NSButtonNSViewB arkasında, imleç değişiklikleri aynı xy koordinatlarında alt sınıf.

Bu davranışı nasıl durdururum?

Bu düzenin nedeni, bir 'lightbox' denetimi oluşturduğumdur. NSWindow satırının çizgilerini çizerken ve hata mesajı gösteren ortalanmış bir kutu görürseniz. Bu tür bir şey.

Daha önce NSViewB'un arkasındaki düğmelere vb. Tıklayabileceğiniz bir sorunla karşılaştım. Bu, mouseDown: ve mouseUp:'un bastırılmasıyla çözüldü. Şanssız olarak mouseEntered: ve mouseExited: gibi fare ile ilgili diğer olaylarla benzer bir şey yapmayı denedim.

+0

NSViewB, NSViewA'yı tamamen kapsamaz? – mangerlahn

+0

@Max 'NSViewB', aynı boyuttadır ve 'NSViewA'nın önündedir ve her ikisi de' NSWindow''u doldurur. 'NSViewB' sadece bir mesaj göstermem gerektiğinde görülebilir. Görünür olduğunda, tüm 'NSViewA' kapsar. “NSViewB”, özel mesaj kutumdaki bir çocuk 'NSView' içeren' NSWindow''u kapsayan yarı saydam koyu kaplamadır. 'NSViewA', uygulamam için tüm kullanıcı arayüzünü içeren 'kök' görünümüdür. –

+0

Bu nedenle NSViewA'yı gizleyemiyor musunuz? – mangerlahn

cevap

1

Düğmenizin enabled durumundaki özel imleç dikdörtgeni ekleyerek uyumlu hale getirebilir misiniz? , viewB üzeredir zaman

// MyButton.swift 
override func resetCursorRects() { 
    if enabled { 
     addCursorRect(bounds, cursor: NSCursor.pointingHandCursor()) 
    } 
} 

gösterilmesini düğmesini devre dışı, ve düğme ait rects geçersiz sayılmasının için çağrı: Başka bir deyişle, senin resetCursorRects şu şekilde görünecektir. Eğer Swift kullanıyorsanız, size enabled özelliği kendisine bağlı bir özellik gözlemci bu ikinci bit yapabilirdi: Eğer düğme engelli görünüm almaya istemiyorsanız yapmak,

// MyButton.swift 
override var enabled: Bool { 
    didSet { 
     window!.invalidateCursorRectsForView(self) 
    } 
} 

Başka bir bayrakta addCursorRect çağrı koşulu.

+0

Öneriniz için teşekkürler.Yukarıdaki örneğim basitleştirilmiştir, çünkü imlecin değiştiği birkaç yer var, sadece 'NSViewA' ve sadece bazı 'NSButton'larda değil. Umarım bu gibi bir şeyle çalışabilirim (http://stackoverflow.com/a/11740823/1229237). Biraz sonra deneyeceğim. Ben esas olarak .NET arka plan ile kakao için hala oldukça yeniyim. –