为什么我的tableViewController没有加载任何数据?

时间:2016-03-31 06:28:25

标签: ios arrays swift uitableview tableview

我正在创建一个应用程序,其中ViewController中的不同按钮将不同的菜单加载到tableViewController中。按钮通过准备segue链接,菜单(数组)通过contentMode链接。 1:早餐菜单& 2:午餐菜单。我设置了这个有很多帮助,但现在桌子没有加载任何数据......单元格有3个标签,显示项目,信息和价格。当选择contentMode时,它会更改代码中的值。有没有人在我的代码中看到问题?非常感谢!

import UIKit

class foodMenuController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let foodMenuController = segue.destinationViewController as! foodTableViewController

  if segue.identifier == "showBreakfast" {
            foodMenuController.contentMode = 1
    } else if segue.identifier == "showLunch" {
        foodMenuController.contentMode = 2
        }
    }


}

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

class foodTableViewCell: UITableViewCell {

@IBOutlet weak var foodItem: UILabel!
@IBOutlet weak var foodDescription: UILabel!
@IBOutlet weak var foodPrice: UILabel!

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

}
import UIKit

class foodTableViewController: UITableViewController {

//Content Mode Selection in menu
var contentMode = 0

// THIS SHOULD BE LOADED WHEN CONTENT MODE is "1" --> BREAKFAST
let breakfastItems = ["Bread", "Coffee", "Nada"]
let breakfastInfo = ["Good", "Nice", "Nothing"]
let breakfastPrice = ["$1", "$100", "$12,40"]

// THIS SHOULD BE LOADED WHEN CONTENT MODE IS "2" --> LUNCH
let lunchItems = ["Not bread", "Not Coffee", "Something"]
let lunchInfo = ["Not good", "Not nice", "Yes"]
let lunchPrice = ["$1", "$100", "$12,40"]

var foodItems: [String] = []
var foodInfo: [String] = []
var foodPrice: [String] = []

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

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(true)
    switch (contentMode){
    case 1: contentMode = 1
        foodItems = breakfastItems
        foodInfo = breakfastInfo
        foodPrice = breakfastPrice
    case 2: contentMode = 2
        foodItems = lunchItems
        foodInfo = lunchInfo
        foodPrice = lunchPrice
    default:
        break
    }
    tableView.reloadData()
}


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

}

// Table view data source

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section:
        Int) -> Int {
        return foodItems.count

}


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

    let cellIdentifier = "Cell"
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! foodTableViewCell

    cell.foodItem.text = foodItems[indexPath.row]
    cell.foodDescription.text = foodInfo[indexPath.row]
    cell.foodPrice.text = foodPrice[indexPath.row]

        return cell


    }
}

3 个答案:

答案 0 :(得分:1)

您分享的代码段没有任何明显错误。您可以检查tableView:numberOfRowsInSection:方法中返回的内容,看看它是否返回值> 0

此外,这是给定的,但我们都在某个时间点完成了 - 检查以确保将tableview委托和数据源设置为viewcontroller。

答案 1 :(得分:0)

我无法在哪里看到你设置tableView的数据源和委托,请交叉检查这些都是设置。

答案 2 :(得分:0)

我对你的项目进行了一些修改。 1.制作UINavigationController InitialViewController 2.将FoodMenuController设为UINavigationController的根 http://localhost:22061/Scripts/kendo/2016.1.112/kendo.all.min.js

现在修改您的FoodMenuController

@IBOutlet weak var bakeryButton: UIButton!
@IBOutlet weak var breakfastButton: UIButton!
override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.navigationBarHidden = true //hide navigationBar in first ViewController
    self.bakeryButton.addTarget(self, action: "bakeryButtonAction:", forControlEvents: .TouchUpInside)
    self.breakfastButton.addTarget(self, action: "breakfastButtonAction:", forControlEvents: .TouchUpInside)
}

func bakeryButtonAction(sender: UIButton) {
    performSegueWithIdentifier("showLunch", sender: self)
}

func breakfastButtonAction(sender: UIButton) {
    performSegueWithIdentifier("showBreakfast", sender: self)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let foodTableViewController: FoodTableViewController = segue.destinationViewController as! FoodTableViewController

    if segue.identifier == "showBreakfast" {
        foodTableViewController.contentMode = 1
    } else if segue.identifier == "showLunch" {
        foodTableViewController.contentMode = 2
    }
}

您也可以在UINavigationBar

中看到FoodTableViewController
    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationController?.navigationBarHidden = false
    }

PS:最好不要将segue直接添加到UIButton。或者,您可以从FoodMenuController顶部的黄色按钮添加它,并使用UIButtonAction

指定要在performSegueWithIdentifier中触发的segue