2016-12-04 4 views
0

하나의 UITableViewController에서 시작하는 매우 간단한 iOS 앱을 만들고 각 셀을 클릭하면 다른 데이터를 UIViewController에 푸시합니다. 셀에 자리 표시 자 정보를 추가했지만 시뮬레이터를 실행하면 빈 화면 만 나타납니다. 아래 사진과 코드를 첨부합니다. 나는 몇 가지 반복되는 코드를 가지고있는 것처럼이 모든 보면 UITableViewController 시뮬레이터에서 흰색 빈 화면 표시

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 
    } 

} 

Main Storyboard

것 같습니다. 나는 이것이 쉬운 수정 인 것처럼 느낀다. 그러나 나는 단지 그것을 이해할 수 없다!

답변

1

tableView에 대해 ViewControllerdataSource으로 설정하고 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가 0을 반환하지 않아야합니다. 이 옵션을 생략하면 기본적으로 1이 반환되며 이는 아마도 필요한 것입니다. 2) 스토리 보드에서 UITableView 데이터 소스를 올바르게 설정하고 위임해야합니다. 도움이 필요하면 "storyboard set tableview delegate and data source"를 검색하십시오. 3) NumberOfRowsInSection은 names.count를 반환해야하며 8로 하드 코딩되지 않아야합니다. – xdeleon

0

사용자 인터페이스 빌더 화면 스냅 샷의 왼쪽 상단에있는 장면은 (아마도 당신이 TableViewController를 호출하는 클래스 인)을 UITableViewController 것 같습니다.

그러나 numberOfSectionsnumberOfRowsInSection은 모두 0을 반환합니다. 그러면 빈 화면이 나타납니다. 솔직히 첫 번째 장면의 UITableViewController 하위 클래스를위한 코드가 두 번째 장면의보기 컨트롤러에 배치 된 것처럼 보입니다. 즉, 너무 UITableViewController하지만 전혀 테이블이어야한다 것처럼 보이지 않는 것처럼 보이기 때문에


두 번째 장면 (스냅 샷의 오른쪽 위)는 약간의 혼란이다. 네가 뭘하려고하는지 모르겠다. 반복되는 사건을 가진 테이블일까요? 아니면 첫 번째 장면에서 선택한 셀의 세부 사항일까요? '세부 정보'화면으로 표시된 경우 UIViewController이 아니고 UITableViewController이 아닌 단순한 화면이어야합니다.

관련 문제