2013-04-09 13 views
5

benim OS X app büyük hata mesajı kaplayan statik NSTextField var. Kullanıcının altındaki kontrolleri tıklamasına izin vermeye çalışıyorum. YineNSTextField tıklama mı?

[largeErrorText setEnabled:NO]; 
[largeErrorText setRefusesFirstResponder:YES]; 

:

IB

Ben "etkin" kontrolsüz ettik ve ben kontrol ettik çalışma değildi çünkü ben de kodunda yaptık

"İlk Yanıtlayıcıyı Reddetti" Bu, altındaki nesnelerle etkileşim kurma yolundadır. Başka ne gibi bir fikir olabilir?

enter image description here

iç kırmızı dikdörtgen NSTextField etiketin çerçeve taslak olduğunu ve size ettik rağmen söylüyorsun:

+0

olası yinelenen [Özel bir görünümünde kullanıcı etkileşimini nasıl devre dışı bırakılır] (http://stackoverflow.com/questions/11740638/how-to-disable-user-interaction-in-a-custom-view –

+0

@GabrielePetronella: Bu sorunun, bir – NSGod

+0

ile etkileşiminin devre dışı bırakılması ile ilgisi yok, değil mi? –

cevap

0

ben aşağıdaki resimdeki gibi bir senaryo nitelendiriyor varsayalım gösterir metin alanını devre dışı bıraktı ve ilk cevaplayıcıyı reddetti, tıklamalarınız NSButton'a gitmiyor mu?

Bu tasarım senaryosu "Çakışan kardeş görünümler" denilen bir durum anlatılmaktadır. Genelde bunu mümkün olduğunca engellerim. Yapamazsanız, NSTextField etiketinin, etkileşim kurabilmek istediğiniz tüm diğer UI nesnelerini "arkada" olduğundan emin olarak istenen davranışı alabilirsiniz. Etiketi seçip Editör> Yerleştir> Göndermeyi Gönder'i seçerek bunu yapabilirsiniz. Bu, düğmenin, metin olaylarının önünde olmasını ve böylelikle fare olaylarını uygun şekilde durdurmasını sağlar.

+0

Harika bir yorum, ancak soruya cevap vermiyor. Teşekkürler. –

19

Tıklama bir nesne saydam yapmak için bulduk tek yolu (sizin durumunuzda NSTextField olarak) o nesneyi alt sınıf ve hitTest yöntemi dönen nil geçersiz etmektir. Bu şekilde NSTextField tıklamaya yanıt vermeyecek, bu nedenle aşağıdaki NSView tıklamaya yanıt verecektir.

- (NSView*)hitTest:(NSPoint)aPoint 
{ 
    return nil; 
} 
ait