2012-01-19 23 views
0

NSTextViewにテキストを入力したいので、NSTextViewがカーソルを元の位置に戻してクリアするようにテキストを入力します。入力したテキストは、NSViewdrawRectを使用して画面に表示されます。NSTextViewから文字列を取得してからカーソルを先頭に戻す

これは私が現在動作していないものです。基本的にself.outputStringは、描画してからクリアしても常に現在の値の[textview string]です。下のコードは文字列を画面に描画しません。もし私が[textview setString:@""]を取り除くと、現在のテキストは私が何を書いているのかを常に示しています。あなたはNSTextDelegate protocolによって宣言されたデリゲートメソッドのいくつかの利点を取ることができるように

- (void)drawRect:(NSRect)dirtyRect 
{ 
    [[NSColor whiteColor] setFill]; 

    NSRectFill(dirtyRect); 

    // Drawing code here. 

    NSPoint point = NSMakePoint(50.0f, 700.0f); 
    NSMutableDictionary *font_attributes = [[NSMutableDictionary alloc] init]; 
    NSFont *font = [NSFont fontWithName:@"Futura-MediumItalic" size:35.0f]; 
    [font_attributes setObject:font forKey:NSFontAttributeName]; 
    [self.outputString drawAtPoint:point withAttributes:font_attributes]; 
    [font_attributes release]; 
} 


- (BOOL)textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector { 

    [self enterPressed:[textView string]]; 
    [textView setString:@""]; 


    NSRange range = { 0, 0 }; 
    [self.textView setSelectedRange: range]; 

    return YES; 
} 

- (void) enterPressed:(NSString*)stringEntered 
{ 
    NSLog(@"enter pressed with string: %@", stringEntered); 

    self.outputString = stringEntered; 
    [self setNeedsDisplay:YES]; 
} 

答えて

2

まず第一には、NSTextオブジェクトにデリゲートを設定します。

最初にキャッチしたいメソッドは、textDidChange: notificationで、Enterキーが押されたときに探します。

また、drawRectメソッドが呼び出されますか?あなたがわからない場合は、ブレークポイントを設定して見つけてください。どのオブジェクトがdrawRectと関連付けられていますか?とにかくdrawRectはなぜですか?あなたはちょうどIBOutletとして素敵な中心のNSTextFieldを持つことができ、それにフォントを設定します。

+0

はい、drawRectが確実に呼び出されます。どのようなNSTextオブジェクトを参照していますか?これはNSTextViewです。明確にできますか? –

+0

['NSTextView'は' NSText'(http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSTextView_Class/Reference/Reference.html)から継承しています。あなたが指定した代理人が 'textDidChange:'通知を得るでしょう。 –

+0

これを使って遊んだことがあり、テキストを変更したときに検出されたようですが、復帰時には検出されません。代わりにNSTextFieldを使用する必要があるかどうかは疑問です。あなたは間違いなく助けましたが、残念ながら私はまだ少し失われています。 –

関連する問題