【问题标题】:NSAttributedString - textview not showing attributed text after segueNSAttributedString - 文本视图在 segue 后不显示属性文本
【发布时间】:2016-01-15 15:49:28
【问题描述】:

我对 segues 或我的 textview 有疑问。 有两个视图控制器:ViewController 和 TextViewController。两个视图控制器都显示了一个 UITextView 和一个按钮。 当我按下 ViewController 上的“Text”按钮时,我创建了一个名为“textSegue”的 segue,文本被传递给 TextViewController 并显示。在 TextViewController 上,我可以选择文本并按“粗体”按钮使文本变为粗体。当我按下“返回”按钮时,TextViewController 被关闭,ViewController 将显示属性文本。 问题是,当我再次按下“文本”按钮并显示 TextViewController 时,UITextView 中的文本不会显示属性文本(它不再是粗体了)。

我认为 segue 确实正确传递了属性文本,但不知何故 textview 没有正确显示它。有谁知道我做错了什么?

视图控制器:

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)
    }

}

文本视图控制器:

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()

    }
}

【问题讨论】:

  • 恐怕这是一个错误 :( 任何人都可以验证这一点吗?或者证明我错了 :)

标签: swift segue xcode7


【解决方案1】:

我添加了

textView.attributedText = myString

到 ViewDidAppear(所以现在它在 ViewDidAppear 和 ViewDidLoad 中)。在 ViewDidLoad 中它似乎没有加载属性,但在 ViewDidAppear 中它会。

也许是一个错误?

【讨论】:

    猜你喜欢
    • 2019-11-28
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 2019-02-08
    相关资源
    最近更新 更多