2011-02-01 16 views
15

Diğer tüm pencerelerin önüne yeni bir NSWindow getirmeyi düşünüyorum, ancak odağı almayın. üst gözükmesi için nasılNSWindow Front Yap ama Odaklanmadı

 
NSApplication *thisApp = [NSApplication sharedApplication]; 
[thisApp activateIgnoringOtherApps:YES]; 

[self makeKeyAndOrderFront:self]; 

Herhangi ipuçları ama uzağa başka bir uygulamadan odak alamazlar:

Ben aşağıdakilere odaklanarak önünde görünmesini sağlayabilirsiniz? Yerine makeKeyAndOrderFront: ait

cevap

15

, sadece orderFront: (docs)

+0

... "activateIgnoringOtherApps: EVET" sadece otomatik uzakta tüm diğer uygulamalardan odağı çekiyor. Bu kodu kaldırırsam, yeni pencere diğer pencerelerin ardında görünür, ki bu gariptir, çünkü dokümanlar "orderFront:" ın aradığım şekilde davranması gerektiğini söyler. – redhotvengeance

+1

@ilollar belki ['- (void) orderFrontRegardless'ı deneyin] (http://developer.apple.com/library/mac/#documentation/cocoa/Reference/ApplicationKit/Classes/NSWindow_Class/Reference/Reference.html) – cobbal

+0

Hmmm ... bunu denedi, hala şans yok. Teorik olarak, orderFront ve orderFrontRegardless çağrıları, tüm açık pencerelerin değil, belirli uygulama ekran kümesinin içinde pencereler siparişi içindir, değil mi? – redhotvengeance

6

böyle bir şey deneyin deneyin:

[window setLevel:NSScreenSaverWindowLevel + 1]; 
[window orderFront:nil]; 

Bu, ancak aktif hale getirmeden diğer uygulamanın pencerelerin üzerinde bir pencere gösterecektir. Uygulama B'de normal pencere seviyesine sahip bir pencere, uygulama B aktif uygulama ise, uygulama B penceresinin önünde gösterilemez. (Bunun için iyi bir sebep var, btw).

Lütfen bu yöntemi takdirle kullanın. Çoğu durumda, insan arabirimi kurallarını büyük olasılıkla ihlal edecektir. Yanlış kullanılırsa, kullanıcıyı kızdırmaya eğilimlidir. (Örneğin, şimdi testlerimde, pencere Safari'ye bakmakta olduğum yere direkt olarak yerleştirildi. Yaptığım şeyin, aslında değil için audacity olmasına rağmen anahtar, daha da rahatsız edici yaptı. Ekranın bir köşesinde yoldan çıkmış olsaydı, farklı bir hikaye olabilirdi).

+0

Bingo! İşe yaradı. Endişelerinizi kabul ediyorum ... dikkatli bir şekilde yapılmadığı takdirde uygulanması çok tehlikeli bir şey olabilir. Dikkatli olmak için söz veriyorum :) – redhotvengeance

+0

Sorunları "orderFrontRegardless" ile çözdüm ve bu yöntemi yerine getirmeyi tercih ettim, çünkü bu işlevselliği uygulamak için daha standart bir yol gibi görünüyor. Bununla birlikte, yönteminizin de bilmesi yararlıdır. Yardım için teşekkürler! – redhotvengeance

4

Sipariş ön yöntemleri ve ekran koruyucu +1 düzeyi benim için çalışmadı. -Kenny dan This answer yorumda bulundu: Ben aynı sonuçları alıyorum

[yourPanel setLevel:kCGMaximumWindowLevel];