Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何按tableview单元格以在导航控制器中向视图控制器显示文本_Ios_Swift_Uitableview - Fatal编程技术网

Ios 如何按tableview单元格以在导航控制器中向视图控制器显示文本

Ios 如何按tableview单元格以在导航控制器中向视图控制器显示文本,ios,swift,uitableview,Ios,Swift,Uitableview,实际上,我有一个名为FirstViewController的视图控制器,该视图控制器包含一个名为listTableView的表视图 我想点击table view列表tableview中的一个单元格,并将单元格中的任何文本显示为导航控制器标题 点击单元格时出现的导航控制器称为showDetailsViewController 如何做到这一点 以下是我在FirstViewController import UIKit import AudioToolbox class FirstViewContr

实际上,我有一个名为FirstViewController的视图控制器,该视图控制器包含一个名为listTableView的表视图

我想点击table view列表tableview中的一个单元格,并将单元格中的任何文本显示为导航控制器标题

点击单元格时出现的导航控制器称为showDetailsViewController

如何做到这一点

以下是我在FirstViewController

import UIKit
import AudioToolbox

class FirstViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, FeedModelProtocol  {
    var feedItems: NSArray = NSArray()
    var selectedStock : StockModel = StockModel()
    let tableView = UITableView()
    @IBOutlet weak var listTableView: UITableView!
    @IBOutlet weak var refreshButton: UIBarButtonItem!

    override func viewDidLoad() {
        super.viewDidLoad()
        //set delegates and initialize FeedModel


        self.listTableView.delegate = self
        self.listTableView.dataSource = self

        let feedModel = FeedModel()
        feedModel.delegate = self
        feedModel.downloadItems()

    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }

    @IBAction func reloadData(_ sender: Any) {

        print("reload pressed")
        listTableView.reloadData()
        viewDidLoad()
        _ = AudioServicesPlaySystemSound(1519)
    }



    func itemsDownloaded(items: NSArray) {

        feedItems = items
        self.listTableView.reloadData()
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // Return the number of feed items

        print("item feed loaded")
        return feedItems.count

    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        // Retrieve cell
        let cellIdentifier: String = "stockCell"
        let myCell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier)!
        myCell.textLabel?.textAlignment = .center
        myCell.textLabel?.font = .boldSystemFont(ofSize: 18)
        // Get the stock to be shown
        let item: StockModel = feedItems[indexPath.row] as! StockModel
        // Configure our cell title made up of name and price


        let titleStr = [item.customer].compactMap { $0 }.joined(separator: "-")


        print(titleStr)
        // Get references to labels of cell
        myCell.textLabel!.text = titleStr

        return myCell
    }

}
更新:

此代码有什么问题:

注意: tableview的恢复id为scheduleTable

var homeworkIdentifierFromTableViewCell = ""
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        homeworkIdentifierFromTableViewCell = feedItems[indexPath.row].myCell
        self.performSegue(withIdentifier: "scheduleTable", sender: self)
        listTableView.deselectRow(at: indexPath, animated: true)

    }
更新2

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let item: StockModel = feedItems[indexPath.row] as! StockModel
    let titleStr = [item.customer].compactMap { $0 }.joined(separator: "-")
    print(titleStr)


}

您可以使用didSelectRowAt来注意单击的单元格,并存储单元格中的文本(homeworkArray是结构中的单元格列表。Homeworkidentifier是结构中的一个值)

然后,可以使用prepare for a segue函数将表视图单元格的文本传递给下一个视图控制器。通过在另一个视图控制器(要将数据传递到的视图控制器)中创建一个变量,然后从另一个视图控制器访问该变量并更改其值,可以做到这一点

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "reportBug" {
            let destinationViewController = segue.destination as! WebViewController
            destinationViewController.reason = "reportBug"

        }
        else if segue.identifier == "provideFeedback" {
            let destinationViewController = segue.destination as! WebViewController
            destinationViewController.reason = "provideFeedback"
        }
    }
以下是有关在ViewController之间传递数据的详细信息:

希望这有帮助


编辑: 以下是我正在使用的结构:

struct homeworkTableViewCellData {
    let homeworkName : String!
    let className : String!
    let dateName : String!
    let colorImage : UIImage!
    let homeworkIdentifier : String!
}
我已使用此结构初始化了homeworkArray。当我从单元格中调用一个值时,我从结构中选择一个值

var homeworkIdentifierFromTableViewCell = ""
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        homeworkIdentifierFromTableViewCell = homeworkArray[indexPath.row].homeworkIdentifier

        self.performSegue(withIdentifier: "homeworktoExpandHomework", sender: self)
        homeworkTableView.deselectRow(at: indexPath, animated: true)

    }

使用结构设置表视图更具组织性。这是一个很好的视频,教你如何设置它(如果你想这样做):

Rosalie我有一个简短的问题,你有空吗?我现在有空。我非常感谢你的帮助,我对Swift没有太多的经验,似乎无法让你的代码正常工作。请看一下更新我相信现在的问题是迈塞尔是整个细胞对吗?我在代码(homeworkIdentifier)中获取的是单元格结构中的一个值。你在用结构吗?是的,迈塞尔是整个细胞。如何创建结构来标识单元格中的文本?在主情节提要上为viewController设置标识符,与导航标题上的名称相同。然后通过在标识符参数中传递title来实例化控制器。