2016-12-04 57 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