【问题标题】:Parse from TableVC to textView in other viewController swift在其他 viewController swift 中从 TableVC 解析到 textView
【发布时间】:2017-11-16 13:42:33
【问题描述】:

我是编程新手,有问题。我在 tableview 中为我的数组使用解析。选择该行后,我想在另一个视图控制器上将其与 textView 连接。表格视图效果很好,但我无法将文本发送到 textView。

表VC:

import UIKit
import Parse
class ThirdTableVC: UITableViewController {
@IBOutlet weak var refresherQuotes: UIRefreshControl!
@IBOutlet var quoteTable: UITableView!

var selectedQuote: PFObject?
var quoteItems = [PFObject]()

override func viewDidLoad() {
    super.viewDidLoad()

}
@IBAction func updateQuotesResults(_ sender: UIRefreshControl) {
    fetchQuotesData()
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    loadQuoteTexts(selectedQuote: selectedQuote)
}


override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {



    return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {



    return quoteItems.count
}

func fetchQuotesData() {
    let quotesQuery = PFQuery(className: "TotalTest")
    quotesQuery.whereKey("Subcategory", equalTo: selectedQuote ?? nil)
    quotesQuery.findObjectsInBackground { (objects, error) in
        if let realCategoryObjects = objects {
            self.quoteItems = realCategoryObjects
            self.tableView.reloadData()
            self.refresherQuotes.endRefreshing()
        }
    }
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let quoteCell = tableView.dequeueReusableCell(withIdentifier: "quoteCell", for: indexPath)

    let quoteItem = quoteItems[indexPath.row]
    let quoteUserTitle = quoteItem.object(forKey: "TextQuote") as? String

    quoteCell.textLabel?.text = quoteUserTitle

    return quoteCell
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showQuoteDetail" {
        if let indexPath = tableView.indexPathForSelectedRow {
            let quoteobject = quoteItems[indexPath.row] as? NSDate
            let quoteController = (segue.destination as! UINavigationController).topViewController as! DetailViewController
            quoteController.detailItem = quoteobject
            quoteController.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
            quoteController.navigationItem.leftItemsSupplementBackButton = true
        }
    }
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("Row tapped: \(indexPath.row)")

    let selectedQuotes: PFObject = quoteItems[indexPath.row]
    let  FourthVC = self.storyboard?.instantiateViewController(withIdentifier: "FourthViewController") as! FourthViewController
    FourthVC.fourthTextView.text = quoteItems[indexPath.row] as? String
    self.navigationController?.pushViewController(FourthVC, animated: true)


}

func loadQuoteTexts(selectedQuote: PFObject!) {

    let quoteQuery = PFQuery(className: "TotalQuote")
    quoteQuery.whereKey("QuoteSubs", equalTo: selectedQuote ?? nil)
    quoteQuery.includeKey("QuoteSubs")

    quoteQuery.findObjectsInBackground { (result: [PFObject]?, error) in
        if let searchQuoteResults = result {

            self.quoteItems = searchQuoteResults
            self.quoteTable.reloadData()
        }
    }   
}
}

我该如何改变呢? 带有 textView 的 viewController:

 import UIKit
 import Parse

 class FourthViewController: UIViewController {

var getQuote: PFObject?

@IBOutlet weak var fourthTextView: UITextView!
@IBOutlet weak var fourthLabel: UILabel!


override func viewDidLoad() {
    super.viewDidLoad()
    fourthLabel.text! = getQuote as! String
    fourthTextView.text! = getQuote as! String 
}
}

请帮我传递短信

【问题讨论】:

  • Is 让 selectedQuotes: PFObject = quoteItems[indexPath.row] 返回 nil
  • 我同意@AlizainPrasla,你应该检查你的tableView didSelectRowAt 函数,你的selectedQuotes 对象是你所期望的。另外,您的 prepareForSegue 函数在做什么?这似乎是一个重复的尝试?他们是否都被调用了,或者可能不是您所期望的?

标签: ios swift uitableview parsing textview


【解决方案1】:

如果你使用 pushViewController 那样做,在 selectRowAt 中

let MainStory: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let desVC = MainStory.instantiateViewController(withIdentifier: "FourthViewController") as! FourthViewController

现在传递你的文本

desVC.getText = "here goes your text u want to pass"

FourthViewController 设置你的变量

var getText = String()

所以你终于可以使用了

self.navigationController?.pushViewController(desVC, animated: true)

因此它将传递您之前使用 desVC.getSomething 添加的所有参数

在FourthViewController 中你只需要使用getText。

【讨论】:

    【解决方案2】:

    问题是您正在使用pushViewController 从一个视图更改为另一个视图,这样做您的prepareForSegue 将不会被执行。

    在您的didSelectRow 上,您需要致电performSegue(withIdentifier:sender:)

    您可以查找this question 以获取有关如何操作的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      • 2011-10-05
      • 1970-01-01
      相关资源
      最近更新 更多