如何以不同的不同尺寸显示2个不同的原型单元

时间:2016-09-27 03:54:15

标签: ios swift tableview tableviewcell

更新:

我走了另一条路。继承人我想做什么。设计我的应用程序,让我保存核心数据并在tableview中的另一个控制台中查看它。进入tableview控制台后,我还可以在控制台顶部看到一个图表。

我做了什么:

我创建了一个UIViewController,拖过一个imageview只是为了使用它作为一个例子。我还拖着一张桌子,细胞......等等。

我的问题:

我可以查看空白的tableview单元格并查看示例图像。保存核心数据并返回尝试查看数据后,我收到错误消息。我已经实现了数据源和委托,但是,我需要将它放在我的代码中。

class ViewMealsViewController: UIViewController, NSFetchedResultsControllerDelegate {


    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var menuButton: UIBarButtonItem!

    let managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).managedObjectContext

    var fetchedResultController: NSFetchedResultsController<MealStats> = NSFetchedResultsController()

    override func viewDidLoad() {
        super.viewDidLoad()
        fetchedResultController = getFetchedResultController()
        fetchedResultController.delegate = self
        do {
            try fetchedResultController.performFetch()
        } catch _ {
        }


        if revealViewController() != nil {
            revealViewController().rearViewRevealWidth = 325
            menuButton.target = revealViewController()
            menuButton.action = #selector(SWRevealViewController.revealToggle(_:))

            view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
        }
    }


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


    // MARK:- Retrieve Stats
    func getFetchedResultController() -> NSFetchedResultsController<MealStats> {
        fetchedResultController = NSFetchedResultsController(fetchRequest: taskFetchRequest(), managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
        return fetchedResultController
    }

    func taskFetchRequest() -> NSFetchRequest<MealStats> {
        let fetchRequest = NSFetchRequest<MealStats> (entityName: "MealStats")
        let timeSortDescriptor = NSSortDescriptor(key: "mealtype",
                                                  ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:)))
        let milesSortDescriptor = NSSortDescriptor(key: "mealname",
                                                   ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:)))

        fetchRequest.sortDescriptors = [timeSortDescriptor, milesSortDescriptor]

        return fetchRequest
    }


    // MARK: - TableView data source
     func numberOfSections(in tableView: UITableView) -> Int {
        let numberOfSections = fetchedResultController.sections?.count
        return numberOfSections!
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        let numberOfRowsInSection = fetchedResultController.sections?[section].numberOfObjects
        return numberOfRowsInSection!
    }

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

        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        let mealstats = fetchedResultController.object(at: indexPath) as! MealStats
        cell.textLabel?.text = mealstats.mealtype
        cell.detailTextLabel!.text = mealstats.mealname


        return cell
    }

    // MARK: - TableView Deleteƒ

     func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        let managedObject:NSManagedObject = fetchedResultController.object(at: indexPath) as! NSManagedObject
        managedObjectContext.delete(managedObject)
        do {
            try managedObjectContext.save()
        } catch _ {
        }
    }

    // MARK: - TableView Refresh

    func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
        tableView.reloadData()

    }


}

UIViewController with a sample image for an example

Error I get once I try to view saved core data in the tableview

1 个答案:

答案 0 :(得分:0)

使用UITableViewController

在故事板上向tableview添加两个不同的单元格,

为它们设置两个唯一标识符,即

Cell No. 1标识符:iden_1 第2号单元格标识符:iden_2

然后在你的班级

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

let cell
if(condition)
{
  cell = tableView.dequeueReusableCell(withIdentifier: "iden_1", for: indexPath)
  let stats = fetchedResultController.object(at: indexPath) as! Stats
  cell.textLabel?.text = stats.type
  cell.detailTextLabel!.text = stats.name
}
else{
  cell = tableView.dequeueReusableCell(withIdentifier: "iden_2", for: indexPath)
  let stats = fetchedResultController.object(at: indexPath) as! Stats
  cell.textLabel?.text = stats.type
  cell.detailTextLabel!.text = stats.name
}


return cell
}

并用它来识别两个细胞的高度。

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if(condition)
   return 100
return 200
}