【问题标题】:Delegate method to pass data forward转发数据的委托方法
【发布时间】:2016-05-22 11:04:57
【问题描述】:

我正在使用委托方法在两个视图控制器之间成功地传回数据。

第一个视图控制器是“Review”屏幕,第二个是“Edit”屏幕,主要包含一个 UITextView。

当我在编辑屏幕上更改文本视图的内容并点击保存时,它成功传递到审阅屏幕。但是,当我返回编辑屏幕时, UITextView 是空的。

如何确保编辑屏幕保留存储在委托中的值?

感谢您抽出宝贵时间查看。

查看视图控制器

class AddCampaignViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate, UITextFieldDelegate, TitleViewDelegate {

    @IBOutlet var titleSubtitle: UILabel!

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        if segue.identifier == "AddTitleViewController" {

            let addTitleViewController = segue.destinationViewController as! AddTitleViewController

             addTitleViewController.delegate = self

         }

    }

    override func viewDidLoad() {

        super.viewDidLoad()

    }


    func setCampaignTitle(campaignTitle: String) {

        titleSubtitle.text = campaignTitle

    }

}

编辑视图控制器

protocol TitleViewDelegate {

    func setCampaignTitle(campaignTitle: String)

}

class AddTitleViewController: UIViewController, UITextViewDelegate {

    var delegate : TitleViewDelegate!

    var campaignTitle : String!

    @IBOutlet var titleTextView: UITextView!

    override func viewDidLoad() {

        super.viewDidLoad()

        titleTextView.becomeFirstResponder()

        let logButton : UIBarButtonItem = UIBarButtonItem(title: "Save", style: UIBarButtonItemStyle.Plain, target: self, action: "saveTitle:")

        self.navigationItem.rightBarButtonItem = logButton

    }

    func saveTitle(sender: UIBarButtonItem) {

            delegate.setCampaignTitle(titleTextView.text!)

            self.navigationController?.popViewControllerAnimated(true)

    }

}

【问题讨论】:

    标签: swift delegates uitextview


    【解决方案1】:

    segue 每次都会创建一个新的EditViewController。要向前传递数据,您需要将数据分配给EditViewController 属性,然后在viewDidLoad 方法中将该数据复制到titleTextView.text。这是必要的,因为@IBOutlets 没有设置,当prepareForSegue 运行时仍然是nil

    所以:

    1. 将属性var textToEdit = "" 添加到您的EditViewController
    2. prepareForSegue,设置addTitleViewController.textToEdit = /* the text you want to edit */
    3. EditViewControllerviewDidLoad 中,设置titleTextView.text = textToEdit

    注意:您的delegate 应声明为weak 以避免保留循环(这将导致您因从不释放EditViewControllers 而泄漏内存。您的@IBOutlets 也应声明为weak

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多