2016-12-04 54 views
0

我想使具有始於一個UITableViewController一個非常簡單的iOS應用程序,當你點擊每個細胞(一種不同的方式孩子們應該學習)的白色黑屏它將那個特定的數據爲UIViewController。我在單元格中添加了佔位符信息,但是當我運行模擬器時,只顯示空白屏幕。我附上下面的圖片和代碼。的UITableViewController顯示模擬器

Main Storyboard

Simulator

class TableViewController: UITableViewController { 

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


    @IBAction func backBtn(_ sender: AnyObject) { 
     dismiss(animated: true, completion: nil); 
    } 

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

    override func numberOfSections(in tableView: UITableView) -> Int { 
     return 0 
    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 0 
    } 

} 

class ViewController: UIViewController, UITableViewDelegate { 

    @IBOutlet var tableView: UITableView! 

    var names = ["Manner 1", "Manner 2", "Manner 3", "Manner 4", "Manner 6", "Manner 7", "Manner 8"] 

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

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

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 8 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     var cell = self.tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath as IndexPath) as! Manner2Cell 

     cell.name.text = names[indexPath.row] 

     return cell 
    } 

} 

//Manner2Cell actually refers to the first cell. I know I know bad naming convention. 

class Manner2Cell: UITableViewCell { 
    @IBOutlet weak var name: 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 
    } 

} 

看着這一切,它看起來像我有一些重複的代碼。我覺得這是一個簡單的解決方法,但我無法弄清楚!

回答

1

您必須將您的ViewController設置爲dataSource作爲tableView並採用協議UITableViewDataSource

class ViewController: UITableViewDelegate, UITableViewDataSource, ... { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.delegate = self // Assigns ViewController as delegate for tableView 
     tableView.dataSource = self 
    } 
+0

你還應該檢查幾件事:y1)numberOfSections不應該返回零。如果你忽略這個,它會默認返回1,這可能是你需要的。 2)確保在故事板中正確設置了UITableView數據源和委託。如果您需要幫助,搜索「storyboard set tableview委託和數據源」。 3)NumberOfRowsInSection應該返回names.count而不是硬編碼爲8。 – xdeleon

0

在Interface Builder的屏幕快照的左上角的場景看起來像一個UITableViewController(這大概是你叫TableViewController類)。

但是你的numberOfSectionsnumberOfRowsInSection都返回零。所以你會有一個空白的白屏。坦率地說,它看起來像用於第一場景的UITableViewController子類的代碼已經放入第二場景的視圖控制器中。


你的第二個場景(快照右上)是有點混亂,因爲它看起來像這是一個UITableViewController,太多,但它看起來並不像它應該是一個表都沒有。我不確定你在那裏做什麼。它是否真的是重複出現的表格,還是它應該是您在第一個場景中選擇的單元格的細節?如果它只是一個「細節」屏幕,那麼這應該是一個簡單的UIViewController,而不是UITableViewController