2009-06-11 36 views
5

XCode'da bir Mac uygulaması geliştiriyorum. Belirli bir siteye giden bir köprü eklemem gerekiyor. Bunu bir düğme kullanarak denedim, ancak fare bu düğmenin üzerine geldiğinde imleci el imlecine nasıl değiştireceğimi bilmem gerekiyor.Kakao'da Köprü

cevap

8

URL'yi görüntülemek için düzenlenebilir olmayan bir NSTextField kullanabilirsiniz. Niteliklerini, alanın değer özelliği olarak ayarladığınız NSAttributedString üzerinde uygun şekilde ayarlarsanız, standart mavi-alt çizgi olarak görüntülenir ve imleç izlemeyi sizin için halleder. This Apple Q & A, URL'nin niteliklerini nasıl ayarlayacağınızı anlatır.

+0

Bu Apple teknik notunda yer alan tek sorun, fare imlecinin fareyle üzerine gelindiğinde I-beam metin giriş stili imlecine dönüşmesidir. –

+0

Daha fazla sorun, bağlantıyı tıklattığınızda NSTextField öğesinin yazı tipini sistem varsayılanına değiştirir. Metin alanın yazı tipini kaleme almak için metni zorlayarak aşağıdaki hataları giderir: '[attString addAttribute: NSFontAttributeName value: [label font] range: NSMakeRange (0, [attString length])];' –

4

İmleci ayarlamak için imleç izleme yöntemini addCursorRect:cursor: kullanmanız gerekir. Ancak, bu yöntemi yalnızca resetCursorRects yönteminin içinden çağırmanız yeterlidir. Bunu başka bir zamanda yaparsanız, temel olarak göz ardı edilmesi garanti edilir.

Yani bu NSButton alt sınıf gerektiği anlamına gelir (veya NSView alt sınıf kullanmak istediğiniz her ne ise) ve tüm görünüm en bounds için addCursorRect:cursor: aramaya resetCursorRects geçersiz kılar.

+0

mükemmel benim için çalıştı: o zaman

// Converts an otherwise plain NSTextField label into a hyperlink -(void)updateControl:(NSTextField*)control withHyperlink:(NSString*)strURL { // both are needed, otherwise hyperlink won't accept mousedown [control setAllowsEditingTextAttributes: YES]; [control setSelectable: YES]; NSURL* url = [NSURL URLWithString:strURL]; NSAttributedString* attrString = [control attributedStringValue]; NSMutableAttributedString* attr = [[NSMutableAttributedString alloc] initWithAttributedString:attrString]; NSRange range = NSMakeRange(0, [attr length]); [attr addAttribute:NSLinkAttributeName value:url range:range]; [attr addAttribute:NSForegroundColorAttributeName value:[NSColor blueColor] range:range ]; [attr addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:NSUnderlineStyleSingle] range:range]; [control setAttributedStringValue:attr]; } 

Ve

, bunu çağırmak pencere başlatır bazen zaman içine NSTextField ve URL dizesini geçmek. Alt sınıf NSTextField var. –

2

Bundan sonra tökezleyenler için güncellenmiş bir cevap atmak istiyorum.

Barry'nin cevabında Apple Q & A tarafından belirtilen çözümü denediğimde, etiket bağlantımın metninin tıklandığında küçüleceğini öğrendim. Bazı hata ayıklamalardan sonra, Apple'ın makalesindeki örnek kodun yeni bir öznitelik dizesi oluşturduğunu ancak başlangıçta etiket denetimindeki orijinal özniteliklerin hiçbirini korumadığını öğrendim. Çözüm, etiketin orijinal atfedilen dizesinin bir kopyasıyla başlamalı, yeni köprü özelliklerini eklemeli ve etiketi güncellemelidir.

NSTextField etiketini bir köprüye dönüştüren basit bir yardımcı işlev yapıyorum. Temelde, Apple'ın sayfasındaki çözümü NSAttributeString'e kategori uzantısı eklemesine gerek kalmadan birleştirir. , Teşekkürler

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 

    [self updateControl:_label withHyperlink:@"http://www.stackoverflow.com"]; 

} 
İlgili konular