UITableView in Swift

前端 未结 17 1317
滥情空心
滥情空心 2020-12-04 08:09

I\'m struggling to figure out what\'s wrong with this code snippet. This is currently working in Objective-C, but in Swift this just crashes on the first line of the method.

相关标签:
17条回答
  • 2020-12-04 08:18

    Actually in the Apple's TableView Guide document and Sample Code you will find the sentence below:

    If the dequeueReusableCellWithIdentifier: method asks for a cell that’s defined in a storyboard, the method always returns a valid cell. If there is not a recycled cell waiting to be reused, the method creates a new one using the information in the storyboard itself. This eliminates the need to check the return value for nil and create a cell manually.

    So,we could just code like this:

    var identifer: String = "myCell"
    var cell = tableView.dequeueReusableCellWithIdentifier(identifer) as UITableViewCell
    cell.textLabel.text = a[indexPath.row].name
    cell.detailTextLabel.text = "detail"
    

    I think this is a suitable way to use tableView

    0 讨论(0)
  • 2020-12-04 08:18

    For cell template:

    func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
            let myCell : youCell =  youCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell")
            return myCell
        }
    
    0 讨论(0)
  • 2020-12-04 08:19

    @Sulthan's answer is spot on. One possible convenience modification would be to cast the cell as a UITableViewCell!, rather than a UITableViewCell.

    func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
        var cell = tableView.dequeueReusableCellWithIdentifier("CELL") as UITableViewCell!
        if !cell {
            cell = UITableViewCell(style:.Default, reuseIdentifier: "CELL")
        }
        // setup cell without force unwrapping it
        cell.textLabel.text = "Swift"
        return cell
    }
    

    Now, you can modify the cell variable without force unwrapping it each time. Use caution when using implicitly unwrapped optionals. You must be certain that the value you are accessing has a value.

    For more information, refer to the "Implicitly Unwrapped Optionals" section of The Swift Programming Language.

    0 讨论(0)
  • 2020-12-04 08:20

    Here is what I wrote to get it working...

    First Register the table view cell with the table view

    self.tableView.registerClass(MyTableViewCell.self, forCellReuseIdentifier: "Cell")
    

    Then configure cellForRowAtIndexPath

    func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!  {
        var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as MyTableViewCell
    
        cell.textLabel.text = "Cell Text"
        cell.detailTextLabel.text = "Cell Detail Text in Value 1 Style"
    
        return cell
    }
    

    I then defined a custom cell subclass write at the bottom of the file (since its so much easier now)

    class MyTableViewCell : UITableViewCell {
    
        init(style: UITableViewCellStyle, reuseIdentifier: String!) {
            super.init(style: UITableViewCellStyle.Value1, reuseIdentifier: reuseIdentifier)
        }
    
    }
    
    0 讨论(0)
  • 2020-12-04 08:20

    Here is a simple way to define table cell in swift 2:

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let identifier = "cell"
        let cell = tableView.dequeueReusableCellWithIdentifier(identifier) ??
            UITableViewCell.init(style: UITableViewCellStyle.Default, reuseIdentifier: identifier)
        cell.textLabel!.text = "my text"
        return cell
    }
    

    Swift 3:

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let identifier = "cell"
        let cell = tableView.dequeueReusableCell(withIdentifier: identifier) ??
            UITableViewCell(style: .default, reuseIdentifier: identifier)
        cell.textLabel!.text = "my text"
        return cell
    }
    
    0 讨论(0)
  • 2020-12-04 08:21

    I have done in following way: to show detailTextLabel. text value

     func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    
        let CellIdentifier: String = "cell"
    
        var cell = tableView.dequeueReusableCellWithIdentifier(CellIdentifier) as? UITableViewCell
    
        if cell == nil {
            cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: CellIdentifier)
        }
    
        //cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator
    
        // parse the value of records
        let dataRecord = self.paymentData[indexPath.row] as! NSDictionary
    
        let receiverName = dataRecord["receiver_name"] as! String
        let profession = dataRecord["profession"] as! String
        let dateCreated = dataRecord["date_created"] as! String
        let payAmount = dataRecord["pay_amount"] as! String
    
        println("payment \(payAmount)")
        cell!.textLabel?.text = "\(receiverName)\n\(profession)\n\(dateCreated)"
        cell!.detailTextLabel?.text = "$\(payAmount)"
        cell!.textLabel?.numberOfLines = 4
    
        return cell!
    
    }// end tableview
    
    0 讨论(0)
提交回复
热议问题