2014-06-19 29 views
6

THIS kılavuzunu Apple'dan takip ediyorum, ancak gerçekten düzgün çalışmıyor.NSAttributedString TextField öğesinde değişiklik yapma/sıfırlama

Temel olarak, bir Window içindeki bir NSTextField öğesine özel bir WindowController sınıfı aracılığıyla bir köprü eklemeye çalışıyorum. Ben köprü üzerine geldiğinizde

  • bir 'ben fasulye' (eğer metni seçebilirsiniz gösterir imleç) olsun: Birkaç sorunları ile çalışan köprüyü almanız mümkün değilim. Normalde köprüler üzerinden görüntülenen bir el istiyorum
  • Köprüdeki metni tıklattığımda, tarayıcımdaki bağlantıyı başarıyla açar, ancak metin boyutunu ve biçimini değiştirir (örneğin, artık ortalanmıyor, bazılarına geri döner) varsayılan). Şimdi üzerine geldiğimde elimi aldım. biraz deneme sonrasında

, ben ilk dize (örneğin boyutu, üzerinde tıklamadan önce yazı) .xib dosyasının içinde etiket oluşturduktan yani biçimlendirme olduğunu ayırt ettik. Ben, bunu tıkladıktan sonra Herhangi bir şekilde etkileyemediğim bazı varsayılan yazı tiplerine dönüşür. Yine de hiperlink devam ediyor. .xib çok basittir AboutWindowController.h

#import <Cocoa/Cocoa.h> 

@interface AboutWindowController : NSWindowController 
@property (weak) IBOutlet NSTextField *testLabel; 

@end 

AboutWindowController.h

#import "AboutWindowController.h" 

@interface AboutWindowController() 

@end 

@implementation AboutWindowController 

- (id)initWithWindow:(NSWindow *)window 
{ 
    self = [super initWithWindow:window]; 
    if (self) { 
     // Initialization code here. 
    } 
    return self; 
} 

- (void)windowDidLoad 
{ 
    [super windowDidLoad]; 

    [self.testLabel setAllowsEditingTextAttributes:YES]; 
    [self.testLabel setSelectable:YES]; 

    NSMutableAttributedString* string1 = [[NSMutableAttributedString alloc] init]; 

    NSString* inString = @"Apple Computer"; 
    NSURL* aURL = [NSURL URLWithString:@"www.google.com"]; 

    NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString: inString]; 
    NSRange range = NSMakeRange(0, [attrString length]); 

    [attrString beginEditing]; 
    [attrString addAttribute:NSLinkAttributeName value:[aURL absoluteString] range:range]; 

    // make the text appear in blue 
    [attrString addAttribute:NSForegroundColorAttributeName value:[NSColor blueColor] range:range]; 

    // next make the text appear with an underline 
    [attrString addAttribute: 
    NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:NSSingleUnderlineStyle] range:range]; 

    [attrString endEditing]; 


    [string1 appendAttributedString: attrString]; 


    [self.testLabel setAttributedStringValue:string1]; 
    [self.testLabel setFont:[NSFont fontWithName:@"Helvetica" size:20]]; 
} 
@end 

:

İşte kodun bir kısmını var o bir pencere var etiketli ve etiketini .h dosyasına doğru şekilde bağladım (inanıyorum)

Yardımlarınız için teşekkürler. Soruları/açıklamaları yanıtlamak için düzenli olarak kontrol etmeyi deneyeceğim. DÜZENLEME: Lütfen durumumun güncellemesi için bikram'ın cevabı hakkındaki yorumumu kontrol edin.

cevap

2

Vuruyorsanız karşılaştığınız sorun, NSMutableAttributedString biçimlendirmeyi zorlamaya çalışıyor ve NSTextField kendi kendine zorlanıyor.

Ana XIB'm sadece menü ve pencerem var. Denetleyici XIB'de bir adet Label NSTextField var.

windowController:

@interface TFTWindowController : NSWindowController 

@property (weak) IBOutlet NSTextField *testLabel; 

@end 

@implementation TFTWindowController 

- (id)initWithWindow:(NSWindow *)window 
{ 
    self = [super initWithWindow:window]; 
    if (self) { 
     // Initialization code here. 
    } 
    return self; 
} 

- (void)awakeFromNib { 

} 

- (void)windowDidLoad 
{ 
    [super windowDidLoad]; 
    [self.testLabel setAllowsEditingTextAttributes:YES]; 
    [self.testLabel setSelectable:YES]; 

    NSMutableAttributedString* string1 = [[NSMutableAttributedString alloc] init]; 

    NSString* inString = @"Apple Computer"; 
    NSURL* aURL = [NSURL URLWithString:@"www.google.com"]; 

    NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString:inString]; 
    NSRange range = NSMakeRange(0, [attrString length]); 

    [attrString beginEditing]; 
    [attrString addAttribute:NSLinkAttributeName value:[aURL absoluteString] range:range]; 

    // make the text appear in blue 
    [attrString addAttribute:NSForegroundColorAttributeName value:[NSColor blueColor] range:range]; 

    // next make the text appear with an underline 
    [attrString addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:NSSingleUnderlineStyle] range:range]; 
    [attrString addAttribute:NSFontAttributeName value:[NSFont fontWithName:@"Helvetica" size:20] range:range]; 

    [attrString endEditing]; 


    [string1 appendAttributedString: attrString]; 


    [self.testLabel setAttributedStringValue:string1]; 
    [self.testLabel setFont:[NSFont fontWithName:@"Helvetica" size:20]]; 
} 

@end 

AppDelegate: Size gösterilen el yapmak textfield'ı odaklanmak gerekir görünüyor

@interface TFTAppDelegate : NSObject <NSApplicationDelegate> 

@property(nonatomic, strong)TFTWindowController *windowController; 

@end 

@implementation TFTAppDelegate 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    // Insert code here to initialize your application 
    self.windowController = [[TFTWindowController alloc] initWithWindowNibName:@"TFTWindowController"]; 
    [_windowController showWindow:nil]; 
} 
+0

Cevabınız için teşekkürler - ancak, her şeyi düzeltmedi. Etiketin üzerine geldiğimde (Apple Computer, boyut 20 helvetica), hala beyaz bir asıl imleci göstermiyor (linklere tıklamak için); sadece bir bar. Ayrıca, [self.testLabel setFont ...] 'ı ve [attrString addAttribute: NSFontAttributeName ...]' seçeneğini işaretlediğimde, etiketi tıklatıp metnin yazı tipini sıfırlar. Belki bu biraz anlayış sağlar? – Connor

+0

Test projesinde olduğu gibi başka bir şey de yapıyor olabilirsiniz, bu fonksiyonu ekledim ve el imlecini gösteriyorum ve test projesinin buradan yayınlanmasını istiyorsanız yazı tipini değiştirmiyor. – bikram990

+0

Çok yararlı olur, lütfen yapın! – Connor

0

. Ben imleç sorunu çözmek için kod Bu iki satırı ekleyerek öneriyorum:

[self.testLabel selectText:self]; 
[[self.testLabel currentEditor] setSelectedRange:NSMakeRange(0, 0)]; 

Bu cevap, ben this link bazı kodu kullanın.