一.定义
多行文字输入控件,NSTextView与iOS的UITextView不同,它内中控件组成没有加入滚动条和自动滚动等,所以在使用时经常与NSScrollView一同出现
二.协议<NSTextViewDelegate>
- (BOOL)textShouldBeginEditing:(NSText *)textObject {
return YES; //允许接收输入
}
- (BOOL)textShouldEndEditing:(NSText *)textObject {
return YES; //允许结束输入
}
- (void)textDidBeginEditing:(NSNotification *)notification {
NSTextView *textView = notification.object;
}
- (void)textDidEndEditing:(NSNotification *)notification {
}
- (void)textDidChange:(NSNotification *)notification {
//文字内容改变响应
}
三.带滚动条的TextView
NSScrollView *scrollView = [[NSScrollView alloc] initWithFrame:NSMakeRect(20, 150, 400, 100)];
[scrollView setHasVerticalScroller:YES];
[scrollView setHasHorizontalScroller:NO];
[scrollView setBorderType:NSLineBorder];
[scrollView setDrawsBackground:NO];
[scrollView setHorizontalScrollElasticity:NSScrollElasticityNone];
_textView = [[NSTextView alloc] initWithFrame:NSMakeRect(0, 0, 400, 100)];
[_textView setDrawsBackground:NO];
[_textView setTextColor:[NSColor blackColor]];
[_textView setFont:[NSFont systemFontOfSize:12]];
[_textView setMinSize:NSMakeSize(400, 100)];
[_textView setMaxSize:NSMakeSize(400, FLT_MAX)];
[_textView setVerticallyResizable:YES];
[_textView setHorizontallyResizable:NO];
[_textView setAutomaticLinkDetectionEnabled:NO];
[_textView setUsesFontPanel:NO];
[[_textView textContainer] setContainerSize:NSMakeSize(400, FLT_MAX)];
[[_textView textContainer] setWidthTracksTextView:YES];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setLineSpacing:4.0];
[_textView setDefaultParagraphStyle:paragraphStyle];
[scrollView setDocumentView:_textView];
[self.window.contentView addSubview:scrollView];
四.带placeholder的textview
https://stackoverflow.com/questions/29428594/set-the-placeholder-string-for-nstextview
五.字数大于xxx不能输入
- (BOOL)textView:(NSTextView *)textView shouldChangeTextInRanges:(NSArray<NSValue *> *)affectedRanges replacementStrings:(nullable NSArray<NSString *> *)replacementStrings {
if (textView == self.textView) {
if (replacementStrings.count == 0) return YES;
NSInteger existedLength = textView.string.length;
NSInteger selectedLength = affectedRanges.lastObject.rangeValue.length;
NSInteger replaceLength = replacementStrings.lastObject.length;
if (existedLength - selectedLength + replaceLength > 500) {
return NO; //字数大于500则不能输入,但是可以删除后在输入
}
}
return YES;
}
网友评论