【问题标题】:Swift - displaying data for each row in tableview after row is clickedSwift - 单击行后在表格视图中显示每一行的数据
【发布时间】:2015-06-04 12:14:51
【问题描述】:

在单击行后在 tableview 中显示每一行的数据时出现问题,我想使用 didselectRowAtIndexPath,而不是没有它! :)

ViewController.swift

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
   @IBOutlet weak var tableView: UITableView!

   let textToDisplayInCell:[String] = ["item 1", "item 2", "item 3", "item 4"]
   let textDataforEachRowWhenClicked:[String] = ["first item", "second item ", "third item", "fourth item"]

    override func viewDidLoad() {
       super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
       self.tableView.delegate = self
       self.tableView.dataSource = self
    }

    override func didReceiveMemoryWarning() {
       super.didReceiveMemoryWarning()
       // Dispose of any resources that can be recreated.
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.textToDisplayInCell.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier("Tablecell") as! UITableViewCell
        cell.textLabel!.text = self.textToDisplayInCell[indexPath.row]
        return cell
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        self.performSegueWithIdentifier("toDetailSegue", sender: self)
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        var whatToPass = self.textDataforEachRowWhenClicked
        let detailVC = segue.destinationViewController as! DetailViewController
        detailVC.array = whatToPass
    }
}

DetailViewcontroller.swift

导入 UIKit

class DetailViewController: UIViewController {
@IBOutlet weak var label: UILabel!

var array:[String] = [String]()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    var connection = self.array
    self.label.text = String(stringInterpolationSegment: connection)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

我在单击每一行后得到了这个,相同的数据,当单击第 1 行时,我想要在 detailviewcontroller 的标签中显示第一个项目,依此类推,其他行,帮助,ty

【问题讨论】:

    标签: swift tableview cell didselectrowatindexpath


    【解决方案1】:
        import UIKit
    
        class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
        @IBOutlet weak var tableView: UITableView!
    
    
        let textToDisplayInCell:[String] = ["item 1", "item 2", "item 3", "item 4"]
        let textDataforEachRowWhenClicked:[String] = ["first item", "second item ", "third item", "fourth item"]
        var selectedValue:String!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
    
            self.tableView.delegate = self
            self.tableView.dataSource = self
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
            return self.textToDisplayInCell.count
    
        }
    
        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
           let cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier("Tablecell") as! UITableViewCell
           cell.textLabel!.text = self.textToDisplayInCell[indexPath.row]
           return cell
        }
    
        func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
            selectedValue = textDataforEachRowWhenClicked[indexPath.row] as String
            self.performSegueWithIdentifier("toDetailSegue", sender: self)
        }
    
        override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    
            let detailVC = segue.destinationViewController as! DetailViewController
            detailVC.message = selectedValue
         }
     }
    

    在详细视图中:

    class DetailViewController: UIViewController {
    @IBOutlet weak var label: UILabel!
    
    var message:String!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        var message = self.message
        self.label.text = message
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    

    【讨论】:

      【解决方案2】:

      在 prepareForSegue 中,您将整个数组传递给子控制器,而不是单个特定元素。您需要在 didSelectRowAtIndexPath 中为要传递的元素设置一些变量 (_rowToPass),并在 prepareForSegue 中仅传递该元素。

      func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
      
      
          _rowToPass = indexPath.row 
          self.performSegueWithIdentifier("toDetailSegue", sender: self)
      }
      
      
      
      override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
      
          var whatToPass = self.textDataforEachRowWhenClicked[_rowToPass]
      
          let detailVC = segue.destinationViewController as! DetailViewController
      
          detailVC.array = whatToPass
      
       }
      

      【讨论】:

        猜你喜欢
        • 2018-07-23
        • 1970-01-01
        • 1970-01-01
        • 2016-02-14
        • 2018-01-05
        • 1970-01-01
        • 2023-02-04
        • 2014-12-21
        • 2016-10-19
        相关资源
        最近更新 更多