【问题标题】:How can I return multiple elements in a cell?如何在一个单元格中返回多个元素?
【发布时间】:2015-12-31 20:30:29
【问题描述】:

我想返回一个单元格的多个元素。我该怎么做?这是我正在处理的代码

//
//  TableViewControllerCompiti.swift
//  Secondo B
//
//  Created by Edoardo on 23/12/15.
//  Copyright © 2015 ERC. All rights reserved.
//

import UIKit
import Parse

class TableViewControllerCompiti: UITableViewController {

var selfTable: NSMutableArray = NSMutableArray()

@IBOutlet var MessageTable: UITableView!
@IBOutlet weak var Compiti: UILabel!
@IBOutlet weak var DescrizioneCompiti: UITextView!
@IBOutlet weak var DataCompiti: UILabel!

var messagesArray: [String] = [String]()
var descriptionArray: [String] = [String]()
var dateArray: [String] = [String]()

override func viewDidLoad() {
    super.viewDidLoad()

    func retrieveMessages() {

        let query = PFQuery(className: "Compiti")

        query.findObjectsInBackgroundWithBlock {
            (remoteObjects: [PFObject]?, error: NSError?) -> Void in

            for messageObject in remoteObjects! {

                let messageText: String? = (messageObject as PFObject) ["Materia"] as? String
                let descriptionText: String? = (messageObject as PFObject) ["Compiti"] as? String
                let date: String? = (messageObject as PFObject) ["Data"] as? String

                if messageText != nil {

                    self.messagesArray.append(messageText!)

                }

                if descriptionText != nil {

                    self.descriptionArray.append(descriptionText!)

                }

                if date != nil {

                    self.dateArray.append(date!)

                }
            }

            self.MessageTable.reloadData()

        }
    }

    retrieveMessages()

}

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

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    var cell = UITableViewCell?()
    cell = tableView.dequeueReusableCellWithIdentifier("cell")

    Compiti.text = self.messagesArray[indexPath.row]
    DataCompiti.text = self.dateArray[indexPath.row]
    DescrizioneCompiti.text = self.descriptionArray[indexPath.row]

    if cell == nil {
            cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "ReUseCell")
        }

    return cell!
}

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

    return self.messagesArray.count
    }
}

当我运行它时,模拟器只返回一堆空单元格。如何返回元素?

【问题讨论】:

  • 你有多少个原型单元?它们的可重用标识符是什么?你有单元格的自定义类吗?另外,viewDidLoad 中不应该有函数
  • 我从 Parse 获取信息,因此单元格的数量取决于 Parse 数据库中的行数。它们的可重用标识符是cell。不,我没有任何自定义课程。 @alaphao
  • ComptiDescrizioneCompitiDataCompiti 是原型单元内的组件,对吧?首先,您应该创建一个自定义 tableViewCell 并将插座连接到您创建的自定义单元,而不是在 viewcontroller 上。
  • 返回行数时self.messagesArray.count的值是多少? (最好有一个对象数组,每个对象包含三个字符串,而不是三个字符串数组。想象一下,如果您收到没有匹配描述的消息文本会发生什么!)
  • 你能告诉我(在答案中)我该怎么做吗? @菲利普米尔斯

标签: swift parse-platform tableview


【解决方案1】:

来自您的代码的备注:

  • 你不能在 viewDidLoad() 内部实现和调用函数,你在生命周期之外实现所有函数/方法然后在里面调用。

  • 我认为使用三个不同的数组来包含您的数据并不是一个好主意,您应该学习 structclass 数据结构来对您的数据进行分组,因为您正在获取它们来自同一个班级。

    struct myDataContainer
    {
        var message:String?
        var descriptionText:String?
        var date:String?
    }
    
     var arrayOfContainers = [myDataContainer]()  //<-- this will be your new array
    
  • 我看到你有一个自定义单元格,你想要有 2 个标签和 UITextView。你应该创建一个 UITableViewCell 的子类,然后将它们分组。

          class CustomizeCell :UITableViewCell
          {
                @IBOutlet weak var Compiti: UILabel!
                @IBOutlet weak var DescrizioneCompiti: UITextView!
                 @IBOutlet weak var DataCompiti: UILabel!
    
          } //<--- Subclass of UITableViewCell above
    
    
          struct myDataContainer
            {
               var message:String?
               var descriptionText:String?
               var date:String?
            }
    
    class TableViewControllerCompiti: UITableViewController {
    
    
    
    var arrayOfContainers = [myDataContainer]()  //<-- this will be your new array
    
    
    override func viewDidLoad()
    {
        super.viewDidLoad()
        retrieveMessages()   //<--- call function
    }
    
    func retrieveMessages()
    {
        var objectT = myDataContainer()
        let query = PFQuery(className: "Compiti")
        query.findObjectsInBackgroundWithBlock {(objects: [PFObject]?, error: NSError?) -> Void in
    
            if let remoteObjects = objects
            {
                for messageObject in remoteObjects
                {
                    let messageText = messageObject["Materia"]  as? String
                    let description = messageObject["Compiti"]  as? String
                    let date        = messageObject["Data"]     as? String
    
                        objectT.message = messageText!
                        objectT.descriptionText = description!
                        objectT.date = date!
    
                        self.arrayOfContainers.append(objectT)
    
                }
                self.tableView.reloadData()
            }
        }
    }
    
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomizeCell
        // as! CustomizeCell technically speaking make sure that we access our customize cell
    
        let data = self.arrayOfContainers[indexPath.row]
        cell.Compiti.text = data.message
        cell.DataCompiti.text = data.descriptionText
        cell.DescrizioneCompiti.text = data.date
    
        return cell
    }
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.arrayOfContainers.count
         }
       }
    

【讨论】:

  • 这段代码给了我一个Thread 1: breakpoint 1.1 错误。我做错什么了? @拉马尔
  • 他们在问题@Lamar
  • 这是最后一张图片@Lamar
猜你喜欢
  • 2022-01-22
  • 1970-01-01
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 2018-11-06
相关资源
最近更新 更多