{"id":576,"date":"2023-02-25T19:19:06","date_gmt":"2023-02-25T11:19:06","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=576"},"modified":"2023-04-29T20:32:38","modified_gmt":"2023-04-29T12:32:38","slug":"swift-ui-multi-line-text-input-box-uitextview","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/02\/25\/swift-ui-multi-line-text-input-box-uitextview\/","title":{"rendered":"Swift UI &#8211; \u591a\u884c\u6587\u672c\u8f93\u5165\u6846\uff08UITextView\uff09"},"content":{"rendered":"<blockquote>\n<p>\u6ce8\uff1a\u4ee3\u7801\u5df2\u5347\u7ea7\u81f3Swift4<\/p>\n<\/blockquote>\n<h3>\u591a\u884c\u6587\u672c\u63a7\u4ef6\u7684\u521b\u5efa<\/h3>\n<p>\u6587\u672c\u8f93\u5165\u6846\u652f\u6301\u7684\u6837\u5f0f\uff1a<\/p>\n<p><!-- more --><\/p>\n<pre><code class=\"language-swift\">let textview = UITextView(frame:CGRect(x:10, y:100, width:200, height:100))\ntextview.layer.borderWidth = 1  \/\/\u8fb9\u6846\u7c97\u7ec6\ntextview.layer.borderColor = UIColor.gray.cgColor  \/\/\u8fb9\u6846\u989c\u8272\nself.view.addSubview(textview)<\/code><\/pre>\n<h3>\u6587\u672c\u5185\u5bb9<\/h3>\n<pre><code class=\"language-swift\">\/\/\u8bbe\u7f6e\u663e\u793a\u5185\u5bb9\ntextView.text =&quot;Welcome to AppBlog.CN&quot;<\/code><\/pre>\n<h3>\u662f\u5426\u53ef\u6eda\u52a8<\/h3>\n<pre><code class=\"language-swift\">\/\/\u662f\u5426\u53ef\u4ee5\u6eda\u52a8\ntextView.scrollEnabled = true<\/code><\/pre>\n<h3>\u6587\u672c\u9ad8\u5ea6<\/h3>\n<pre><code class=\"language-swift\">\/\/\u81ea\u9002\u5e94\u9ad8\u5ea6\ntextView.autoresizingMask = UIViewAutoresizing.FlexibleHeight\n\n\/\/\u83b7\u53d6\u5185\u5bb9\u6574\u4f53\u9ad8\u5ea6\nvar height:CGFloat = textView.contentSize.height<\/code><\/pre>\n<h3>\u662f\u5426\u53ef\u7f16\u8f91<\/h3>\n<pre><code class=\"language-swift\">textview.isEditable = false<\/code><\/pre>\n<h3>\u5185\u5bb9\u662f\u5426\u53ef\u9009<\/h3>\n<pre><code class=\"language-swift\">textview.isSelectable = false<\/code><\/pre>\n<h3>\u6587\u672c\u9009\u4e2d<\/h3>\n<pre><code class=\"language-swift\">\/\/\u9009\u4e2d\u4e00\u6bb5\u6587\u672c\ntextView.becomeFirstResponder()\ntextView.selectedRange = NSMakeRange(30, 10)<\/code><\/pre>\n<h3>\u5b57\u4f53\u53ca\u989c\u8272<\/h3>\n<pre><code class=\"language-swift\">\/\/\u80cc\u666f\u989c\u8272\u8bbe\u7f6e\ntextView.backgroundColor = UIColor.grayColor()\n\n\/\/\u8bbe\u7f6etextview\u91cc\u9762\u7684\u5b57\u4f53\u989c\u8272\ntextView.textColor = UIColor.greenColor()\n\n\/\/\u8bbe\u7f6e\u6587\u672c\u5b57\u4f53\ntextView.font = UIFont.systemFontOfSize(18);  \/\/\u4f7f\u7528\u7cfb\u7edf\u9ed8\u8ba4\u5b57\u4f53\uff0c\u6307\u5b9a14\u53f7\u5b57\u53f7\ntextView.font = UIFont(name: &quot;Helvetica-Bold&quot;, size: 18)  \/\/\u6307\u5b9a\u5b57\u4f53\uff0c\u6307\u5b9a\u5b57\u53f7<\/code><\/pre>\n<h3>\u8bbe\u7f6e\u5bf9\u9f50\u65b9\u5f0f<\/h3>\n<pre><code class=\"language-swift\">\/\/\u6587\u672c\u5bf9\u9f50\u65b9\u5f0f\ntextView.textAlignment = .left\n\n\/\/\u5176\u4e2dUITextField\u7684\u6587\u672c\u7684\u5bf9\u9f50\u65b9\u5f0f\npublic enum NSTextAlignment : Int {\n    case left \/\/ Visually left aligned\n    case center \/\/ Visually centered\n    case right \/\/ Visually right aligned\n    \/* !TARGET_OS_IPHONE *\/\n    \/\/ Visually right aligned\n    \/\/ Visually centered  \n    case justified \/\/ Fully-justified. The last line in a paragraph is natural-aligned.\n    case natural \/\/ Indicates the default alignment for script\n}<\/code><\/pre>\n<h3>\u8bbe\u7f6e\u5706\u89d2<\/h3>\n<pre><code class=\"language-swift\">\/\/\u6587\u672c\u89c6\u56fe\u8bbe\u7f6e\u5706\u89d2\ntextView.layer.cornerRadius = 20\ntextView.layer.masksToBounds = true<\/code><\/pre>\n<h3>\u8bbe\u7f6e\u5bcc\u6587\u672c<\/h3>\n<pre><code class=\"language-swift\">\/\/\u8bbe\u7f6e\u5bcc\u6587\u672c\nvar attributeString:NSMutableAttributedString=NSMutableAttributedString(string: &quot;\u7ecf\u5e38\u542c\u5230\uff0c\u62bc\u91d1\u4e0d\u9000\uff0c\u665a\u4e00\u5929\u4ea4\u623f\u79df\uff0c\u88ab\u8bb9\u4e86\u3002\u7f51\u4e0a\u62a5\u4ef7\u4e0d\u771f\u5b9e\uff1f\u7ecf\u5e38\u88ab\u5ffd\u60a0&quot;)\n\n\/\/\u8bbe\u7f6e\u5b57\u4f53\u989c\u8272\nattributeString.addAttribute(NSForegroundColorAttributeName, value: UIColor.greenColor(), range: NSMakeRange(0, attributeString.length)) \n\n\/\/\u6587\u672c\u6240\u6709\u5b57\u7b26\u5b57\u4f53HelveticaNeue-Bold\uff0c16\u53f7\nattributeString.addAttribute(NSFontAttributeName, value: UIFont(name: &quot;HelveticaNeue-Bold&quot;, size: 16)!, range: NSMakeRange(0, attributeString.length))       \n\n\/\/\u6587\u672c0\u5f00\u59cb5\u4e2a\u5b57\u7b26\u5b57\u4f53HelveticaNeue-Bold\uff0c16\u53f7\nattributeString.addAttribute(NSFontAttributeName, value: UIFont(name: &quot;HelveticaNeue-Bold&quot;, size: 26)!, range: NSMakeRange(0, 5))\n\n\/\/\u8bbe\u7f6e\u5b57\u4f53\u989c\u8272\nattributeString.addAttribute(NSForegroundColorAttributeName, value: UIColor.whiteColor(), range: NSMakeRange(0, 3))\n\n\/\/\u8bbe\u7f6e\u6587\u5b57\u80cc\u666f\u989c\u8272\nattributeString.addAttribute(NSBackgroundColorAttributeName, value: UIColor.orangeColor(), range: NSMakeRange(3, 3))\n\n\/\/\u8d4b\u503c\u5bcc\u6587\u672c\ntextView.attributedText = attributeString<\/code><\/pre>\n<h3>\u7ed9\u6587\u5b57\u4e2d\u7684\u7535\u8bdd\u53f7\u7801\u548c\u7f51\u5740\u81ea\u52a8\u52a0\u94fe\u63a5<\/h3>\n<pre><code class=\"language-swift\">textview.dataDetectorTypes = []  \/\/\u90fd\u4e0d\u52a0\u94fe\u63a5\ntextview.dataDetectorTypes = UIDataDetectorTypes.phoneNumber  \/\/\u53ea\u6709\u7535\u8bdd\u52a0\u94fe\u63a5\ntextview.dataDetectorTypes = UIDataDetectorTypes.link  \/\/\u53ea\u6709\u7f51\u5740\u52a0\u94fe\u63a5\ntextview.dataDetectorTypes = UIDataDetectorTypes.all  \/\/\u7535\u8bdd\u548c\u7f51\u5740\u90fd\u52a0\n\n\/\/\u662f\u5426\u5141\u8bb8\u70b9\u51fb\u94fe\u63a5\u548c\u9644\u4ef6\ntextView.isSelectable = true<\/code><\/pre>\n<h3>\u8fd4\u56de\u952e\u7c7b\u578b<\/h3>\n<pre><code class=\"language-swift\">\/\/\u8fd4\u56de\u952e\u7684\u7c7b\u578b\ntextView.returnKeyType = UIReturnKeyType.Done\n\n\/\/\u952e\u76d8\u7684\u8fd4\u56de\u952e\u7c7b\u578b\npublic enum UIReturnKeyType : Int {  \n    case `default`\n    case go\n    case google\n    case join\n    case next\n    case route\n    case search\n    case send\n    case yahoo\n    case done\n    case emergencyCall\n    @available(iOS 9.0, *)\n    case `continue`\n}<\/code><\/pre>\n<h3>\u952e\u76d8\u7c7b\u578b<\/h3>\n<pre><code class=\"language-swift\">\/\/\u952e\u76d8\u7c7b\u578b\ntextView.keyboardType = UIKeyboardType.Default\n\u952e\u76d8\u7684\u7c7b\u578b\u4e5f\u662f\u6bd4\u8f83\u591a\u7684\npublic enum UIKeyboardType : Int {\n    case `default` \/\/ Default type for the current input method.\n    case asciiCapable \/\/ Displays a keyboard which can enter ASCII characters\n    case numbersAndPunctuation \/\/ Numbers and assorted punctuation.\n    case URL \/\/ A type optimized for URL entry (shows . \/ .com prominently).\n    case numberPad \/\/ A number pad with locale-appropriate digits (0-9, \u06f0-\u06f9, \u0966-\u096f, etc.). Suitable for PIN entry.\n    case phonePad \/\/ A phone pad (1-9, *, 0, #, with letters under the numbers).\n    case namePhonePad \/\/ A type optimized for entering a person&#039;s name or phone number.\n    case emailAddress \/\/ A type optimized for multiple email address entry (shows space @ . prominently).\n    @available(iOS 4.1, *)\n    case decimalPad \/\/ A number pad with a decimal point.\n    @available(iOS 5.0, *)\n    case twitter \/\/ A type optimized for twitter text entry (easy access to @ #)\n    @available(iOS 7.0, *)\n    case webSearch \/\/ A default keyboard type with URL-oriented addition (shows space . prominently).\n    @available(iOS 10.0, *)\n    case asciiCapableNumberPad \/\/ A number pad (0-9) that will always be ASCII digits.   \n    public static var alphabet: UIKeyboardType { get } \/\/ Deprecated\n}<\/code><\/pre>\n<h3>\u81ea\u5b9a\u4e49\u9009\u62e9\u5185\u5bb9\u540e\u7684\u83dc\u5355<\/h3>\n<p>\u5728\u70b9\u9009\u6587\u5b57\u540e\u4f1a\u5f39\u51fa\u83dc\u5355\u8fdb\u884c\u9009\u62e9\uff0c\u590d\u5236\u7b49\u64cd\u4f5c\u3002\u6211\u4eec\u53ef\u4ee5\u5728\u8fd9\u4e2a\u83dc\u5355\u4e0a\u6dfb\u52a0\u4e00\u4e9b\u5176\u4ed6\u5185\u5bb9\uff0c\u5982\u52a0\u4e0a\u201c\u90ae\u4ef6\u201d\u201c\u5fae\u4fe1\u201d\u7b49\u6309\u94ae\u9009\u9879<\/p>\n<pre><code class=\"language-swift\">import UIKit\n\nclass ViewController: UIViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        let textview = UITextView(frame:CGRect(x:10, y:100, width:200, height:100))\n        textview.layer.borderWidth = 1  \/\/\u8fb9\u6846\u7c97\u7ec6\n        textview.layer.borderColor = UIColor.gray.cgColor  \/\/\u8fb9\u6846\u989c\u8272\n        self.view.addSubview(textview)\n\n        let mail = UIMenuItem(title: &quot;\u90ae\u4ef6&quot;, action: #selector(ViewController.onMail))\n        let weixin = UIMenuItem(title: &quot;\u5fae\u4fe1&quot;, action: #selector(ViewController.onWeiXin))\n        let menu = UIMenuController()\n        menu.menuItems = [mail,weixin]\n    }\n\n    @objc func onMail() {\n        print(&quot;mail&quot;)\n    }\n\n    @objc func onWeiXin() {\n        print(&quot;weixin&quot;)\n    }\n\n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n    }\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u6ce8\uff1a\u4ee3\u7801\u5df2\u5347\u7ea7\u81f3Swift4 \u591a\u884c\u6587\u672c\u63a7\u4ef6\u7684\u521b\u5efa \u6587\u672c\u8f93\u5165\u6846\u652f\u6301\u7684\u6837\u5f0f\uff1a let textview = UIT [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[171],"tags":[],"class_list":["post-576","post","type-post","status-publish","format-standard","hentry","category-swift"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/576","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=576"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/576\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=576"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=576"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=576"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}