NSAttributedString - textview 在 segue 之后不显示属性文本
NSAttributedString - textview not showing attributed text after segue
我的 segues 或我的 textview 有问题。
有两个视图控制器:ViewController 和 TextViewController。两个视图控制器都显示一个 UITextView 和一个按钮。
当我按下 ViewController 上的 "Text" 按钮时,我创建了一个名为 "textSegue" 的 segue,文本被传递到 TextViewController 并显示。在 TextViewController 上,我可以 select 文本并按 "Bold" 按钮使文本变为粗体。当我按下 "Back" 按钮时,TextViewController 被关闭并且 ViewController 将显示属性文本。
问题是,当我再次按下 "Text" 按钮并显示 TextViewController 时,UITextView 中的文本不显示属性文本(它不再是粗体)。
我认为 segue 确实正确地传递了属性文本,但不知何故 textview 没有正确显示它。有谁知道我做错了什么吗?
ViewController:
import UIKit
class ViewController: UIViewController, TextViewControllerDelegate {
var newtext = NSAttributedString()
@IBOutlet var textView: UITextView!
@IBAction func btnText(sender: AnyObject) {
self.performSegueWithIdentifier("textSegue", sender: nil)
newtext = textView.attributedText
print("viewcontroller btnText pressed")
print("newtext :", newtext)
}
@IBAction func btnLocation(sender: AnyObject) {
}
override func viewDidLoad() {
super.viewDidLoad()
newtext = textView.attributedText
print("ViewController ViewDidLoad")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "textSegue"{
let vc = segue.destinationViewController as! TextViewController
vc.myString = newtext
vc.delegate = self
print("open Textview:")
print(newtext)
}
}
func setText(controller: TextViewController, nieuwetext: NSAttributedString) {
newtext = nieuwetext
print("Segue ontvangen1: ", newtext)
textView.attributedText = newtext
controller.navigationController?.popViewControllerAnimated(true)
}
}
正文ViewController:
import UIKit
protocol TextViewControllerDelegate {
func setText(controller: TextViewController, nieuwetext: NSAttributedString);
}
class TextViewController: UIViewController {
var delegate : TextViewControllerDelegate! = nil
var myString = NSAttributedString(string: "")
@IBOutlet var textView: UITextView!
@IBAction func btnTextBack(sender: AnyObject) {
myString = textView.attributedText
print("textview btnTextBack pressed: ")
print(myString)
if (delegate != nil) {
delegate!.setText(self, nieuwetext: myString)
}
dismissViewControllerAnimated(true, completion:nil)
}
@IBAction func btnBold(sender: AnyObject) {
textView.toggleBoldface(self)
}
override func viewDidLoad() {
super.viewDidLoad()
textView.attributedText = myString
print("textView viewDidLoad")
print("myString: ", myString)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
我已经添加了
textView.attributedText = myString
到 ViewDidAppear(所以现在它在 ViewDidAppear 和 ViewDidLoad 中)。在 ViewDidLoad 中它似乎没有加载属性,但在 ViewDidAppear 中它确实加载了。
可能是一个错误?
我的 segues 或我的 textview 有问题。 有两个视图控制器:ViewController 和 TextViewController。两个视图控制器都显示一个 UITextView 和一个按钮。 当我按下 ViewController 上的 "Text" 按钮时,我创建了一个名为 "textSegue" 的 segue,文本被传递到 TextViewController 并显示。在 TextViewController 上,我可以 select 文本并按 "Bold" 按钮使文本变为粗体。当我按下 "Back" 按钮时,TextViewController 被关闭并且 ViewController 将显示属性文本。 问题是,当我再次按下 "Text" 按钮并显示 TextViewController 时,UITextView 中的文本不显示属性文本(它不再是粗体)。
我认为 segue 确实正确地传递了属性文本,但不知何故 textview 没有正确显示它。有谁知道我做错了什么吗?
ViewController:
import UIKit
class ViewController: UIViewController, TextViewControllerDelegate {
var newtext = NSAttributedString()
@IBOutlet var textView: UITextView!
@IBAction func btnText(sender: AnyObject) {
self.performSegueWithIdentifier("textSegue", sender: nil)
newtext = textView.attributedText
print("viewcontroller btnText pressed")
print("newtext :", newtext)
}
@IBAction func btnLocation(sender: AnyObject) {
}
override func viewDidLoad() {
super.viewDidLoad()
newtext = textView.attributedText
print("ViewController ViewDidLoad")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "textSegue"{
let vc = segue.destinationViewController as! TextViewController
vc.myString = newtext
vc.delegate = self
print("open Textview:")
print(newtext)
}
}
func setText(controller: TextViewController, nieuwetext: NSAttributedString) {
newtext = nieuwetext
print("Segue ontvangen1: ", newtext)
textView.attributedText = newtext
controller.navigationController?.popViewControllerAnimated(true)
}
}
正文ViewController:
import UIKit
protocol TextViewControllerDelegate {
func setText(controller: TextViewController, nieuwetext: NSAttributedString);
}
class TextViewController: UIViewController {
var delegate : TextViewControllerDelegate! = nil
var myString = NSAttributedString(string: "")
@IBOutlet var textView: UITextView!
@IBAction func btnTextBack(sender: AnyObject) {
myString = textView.attributedText
print("textview btnTextBack pressed: ")
print(myString)
if (delegate != nil) {
delegate!.setText(self, nieuwetext: myString)
}
dismissViewControllerAnimated(true, completion:nil)
}
@IBAction func btnBold(sender: AnyObject) {
textView.toggleBoldface(self)
}
override func viewDidLoad() {
super.viewDidLoad()
textView.attributedText = myString
print("textView viewDidLoad")
print("myString: ", myString)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
我已经添加了
textView.attributedText = myString
到 ViewDidAppear(所以现在它在 ViewDidAppear 和 ViewDidLoad 中)。在 ViewDidLoad 中它似乎没有加载属性,但在 ViewDidAppear 中它确实加载了。
可能是一个错误?