2013年4月14日日曜日

NSTextFieldのマルチライン/シングルライン

NSTextFieldの入力可能なマルチライン/シングルラインに関するメモ

例えば、isSingleLineModeでシングルかマルチか変更するとする。

シングルラインの場合:
・文字が改行されないようにする

マルチラインの場合:
・文字が改行されるようにする
・改行キーを押した場合に改行される

文字の改行表示の制御は
[[textField cell] setUsesSingleLineMode:NO]; で

文字のリターンキーによる改行入力は、NSTextFieldのデリゲートを指定し、
NSControlTextEditingDelegateプロトコルの
- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector
メソッド内で、リターンキーが押された場合の挙動を制御する。

以下、例

- (void)setupWithSingleLineMode:(BOOL)isSingleLineMode
{
    NSTextField *textField = [[NSTextField alloc] initWithFrame:NSMakeRect(0,0,300,30)];

    if (isSingleLineMode) {
        [[textField cell] setWraps:NO];
        [[textField cell] setLineBreakMode:NSLineBreakByClipping];
        [[textField cell] setUsesSingleLineMode:YES];
    } else {
        [textField setDelegate:self];
        [[textField cell] setWraps:YES];
        [[textField cell] setLineBreakMode:NSLineBreakByWordWrapping];
        [[textField cell] setUsesSingleLineMode:NO];
    }
}


// This is NSControlTextEditingDelegate for accepting return key in the NSTextField. See, http://developer.apple.com/library/mac/#qa/qa1454/_index.html //
- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector
{
    BOOL result = NO;
    if (commandSelector == @selector(insertNewline:)) {
        [textView insertNewlineIgnoringFieldEditor:self];
        result = YES;
    }
    return result;
}

参考:
http://developer.apple.com/library/mac/#qa/qa1454/_index.html 
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSControlTextEditingDelegate_Protocol/Reference/Reference.html#//apple_ref/doc/uid/TP40008597-CH1-SW21



0 件のコメント: