2017-12-26 31 views
2

Mein Code:cellForRowAt nicht aber numberOfSection und numberOfRowsInSection genannt wird, wird aufgerufen wird

//Adding Destination VC as subview in my current view's view container 
let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let viewController = storyboard.instantiateViewController(withIdentifier: "DestinationViewControllerID") 
     containerView.addSubview(viewController.view) 
     viewController.didMove(toParentViewController: self) 

//Now implementing Table view in the destination vc 

class DestinationViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

var tableView = UITableView() 
    var tableData = ["Beach", "Clubs", "Chill", "Dance"] 

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

     let screenBounds = UIScreen.main.bounds 
     let rect = CGRect(x: 0, y: 0, width: screenBounds.width, height: screenBounds.height) 
     tableView = UITableView(frame: rect, style: UITableViewStyle.plain) 
     tableView.dataSource = self 
     tableView.delegate = self 
     tableView.backgroundColor = UIColor.blue 

     tableView.register(UITableViewCell.self, forCellReuseIdentifier: "my") 

     view.addSubview(tableView) 

     tableView.reloadData() 
    } 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "my", for: indexPath) 
     cell.textLabel?.text = "This is row \(tableData[indexPath.row])" 

     return cell 
    } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 4//tableData.count 
    } 
} 

Wenn ich von Storyboard das Ziel Viewcontroller als meine erste vc bin Einstellung dann, wenn alles funktioniert fine.But Zugabe als Subview in Containeransicht Die cellForRowAt-Methode wird nicht aufgerufen, aber numberOfSection und numberOfRowsInSection werden aufgerufen.

Gibt es jemanden, der eine Lösung hat?

+3

Sie müssen die UITableView zu Ihrem UIViewController.View hinzufügen –

+0

Was ist die schnelle Version? – User511

+0

reload tableview vor dem Hinzufügen zur Unteransicht – Jaydip

Antwort

3

hinzufügen self.addChildViewController (Viewcontroller) vor subviewing

 let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let viewController = storyboard.instantiateViewController(withIdentifier: "DestinationViewControllerID") 

    self.addChildViewController(viewController) 
    containerView.addSubview(viewController.view) 
    viewController.didMove(toParentViewController: self) 
0

Stellen Sie sicher, dass Einschränkungen für UITableView festgelegt sind. Wenn ja, versuchen Sie, die Höhe von UITableViewCell manuell festzulegen.

+0

Versucht, aber nicht funktioniert. Vielen Dank für Ihre Antwort. –

+0

Dies ist nicht das Problem, da sich die Größe von UITableView nicht auf die aufgerufenen Datenquellenmethoden und die Höhe von UITableViewCell auswirkt. –

0

erneut prüfen sind eingetragene reusableidentifier

tableView.dequeueReusableCell (withIdentifier: "mein", für: indexPath)

+0

Bereits überprüft. –

+0

Entfernen Sie diese Zeile. TableView.register (UITableViewCell.self, forCellReuseIdentifier: "my") und versuchen let cell = UITableViewCell() –

+0

Dies könnte nicht möglich sein, da der cellForRowAtIndex selbst nicht aufgerufen wird und der auch ohne Registrierung einer Zelle aufgerufen werden sollte. –

0

Erstens benötigen Sie eine Tabellenansicht in Ihrem Storyboard.

self.view.addSubview(tableView) 

oder fügen Sie in Ihrem Tableview Storyboard und erstellen Sie eine IBOutlet wie folgt aus:: Nach dem Erstellen von Tableview können Sie es programmatisch von SubView

@IBOutlet weak var tableView: UITableView! 

Zweitens haben Sie Ihr Handy nicht initialisiert, Sie habe nur eine zuvor erstellte Zelle aus der Warteschlange genommen (die in deinem Fall nie erstellt wurde). Ihr Code sollte in etwa so aussehen:

var cell = tableView.dequeueReusableCell(withIdentifier: "my", for: indexPath) as UITableViewCell? 
if cell == nil { 
    cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "my") 
    } 
Verwandte Themen