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 件のコメント:
コメントを投稿