刚开始学习Swift并创建了一个小macOS应用程序,我想在其中使用NSScrollView
来显示属性String。我试过了:
@IBOutlet var ScrollViewOutlet : NSScrollView
var attributedString = NSMutableAttributedString(string: myText)
ScrollViewOutlet.insertText(attributedString)
但这似乎不起作用。我发现有点令人困惑,因为与NSTextView
做同样的事情就像魅力一样。
我在这里缺少什么?
答案 0 :(得分:9)
在下面的示例中,我在界面构建器中添加了scrollView作为我的起点。
如果您的scrollView / textView为空/空白,或者如果您需要在scrollView / textView中已有的文本前添加文本,则以下情况有效。如果框中已有文本,则新文本将插入现有文本的前面。
documentView是一个NSTextView
Swift 4.0
Active Qt
答案 1 :(得分:6)
似乎Xcode的早期测试版(以Swift为特色)在这类插座上存在一些严重问题(正如你在这里看到的那样:http://swiftwtf.tumblr.com/post/88387419568/nstextview)。 但是,自Xcode 6 Beta 6
起作用。
textFieldOutlet.textStorage.mutableString.setString("Hello w0rld!")
要处理字符串,为textField
而不是scrollView
本身创建出口也是一种更好的做法。
答案 2 :(得分:5)
Apple有一篇关于以编程方式在滚动视图中设置文本视图的文章。 Text System User Interface Layer Programming Guide: Putting an NSTextView Object in an NSScrollView您应该阅读以获得最大的理解,但这里是代码:
NSScrollView *scrollview = [[NSScrollView alloc] initWithFrame:[[theWindow contentView] frame]];
NSSize contentSize = [scrollview contentSize];
[scrollview setBorderType:NSNoBorder];
[scrollview setHasVerticalScroller:YES];
[scrollview setHasHorizontalScroller:NO];
[scrollview setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
theTextView = [[NSTextView alloc] initWithFrame:NSMakeRect(0, 0, contentSize.width, contentSize.height)];
[theTextView setMinSize:NSMakeSize(0.0, contentSize.height)];
[theTextView setMaxSize:NSMakeSize(FLT_MAX, FLT_MAX)];
[theTextView setVerticallyResizable:YES];
[theTextView setHorizontallyResizable:NO];
[theTextView setAutoresizingMask:NSViewWidthSizable];
[[theTextView textContainer] setContainerSize:NSMakeSize(contentSize.width, FLT_MAX)];
[[theTextView textContainer] setWidthTracksTextView:YES];
[scrollview setDocumentView:theTextView];
[theWindow setContentView:scrollview];
[theWindow makeKeyAndOrderFront:nil];
[theWindow makeFirstResponder:theTextView];
然后,您可以通过对其textStorage
对象进行操作来设置文本视图的文本:
theTextView.textStorage.attributedString = attributedString;
答案 3 :(得分:2)
答案 4 :(得分:2)
@IBOutlet weak var scrollView: NSScrollView!
documentView
中的NSScrollView
是NSTextView
,因此在Swift中,您可以使用以下代码:
let textView : NSTextView? = scrollView?.documentView as? NSTextView
textView?.string = text
答案 5 :(得分:1)
对于NSScrollView:
@IBOutlet weak var textScroll: NSScrollView!
检查出来:
let text = textScroll.documentView!.textStorage!!
let attr = NSAttributedString(string: "Hello World")
text.appendAttributedString(attr)
这非常符合@ mrtn.lxo解决方案的精神,仅针对NSScrollView并使用NSAttributedString。
答案 6 :(得分:1)
以下是如何使用自动布局以编程方式执行此操作:
class ViewController: NSViewController {
let scrollView = NSScrollView()
let textView = NSTextView()
override func viewDidLoad() {
super.viewDidLoad()
textView.maxSize = NSSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude)
textView.autoresizingMask = .width
textView.isVerticallyResizable = true
textView.textContainer?.widthTracksTextView = true
view.addSubview(scrollView)
scrollView.translatesAutoresizingMaskIntoConstraints = false
scrollView.documentView = textView
NSLayoutConstraint.activate([
scrollView.topAnchor.constraint(equalTo: view.topAnchor),
scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor)
])
}
}