2017-01-04 14 views
0

私のVCにはUITableViewと1つのUIlabelがあります。私はすべてのことをコードで行いましたが、Storyboardには何もありません。UITableView代理人は呼び出されません

問題:

  1. 私はどのUITableViewDataSource and UITableViewDelegateが呼び出されていない、その後UITableをリロードしなかった場合。

  2. が私の下のコードで行ったようにUITableをリロードした場合、呼び出されません。

私は以下のコード作業を行っています。

import UIKit 


protocol DataVCProtocol 
{ 
    func addNewVC(Index : Int) 
} 


class DataVC: UIViewController, UITableViewDataSource, UITableViewDelegate { 

    var delegate:DataVCProtocol? 

    var tblData : UITableView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view. 

    } 

    override func viewDidAppear(_ animated: Bool) { 

     super.viewDidAppear(true) 

     self.view.backgroundColor = UIColor.clear 
     self.tblData = UITableView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width - 20 , height: UIScreen.main.bounds.size.height), style: UITableViewStyle.plain) 
     self.tblData.delegate = self 
     self.tblData.dataSource = self 
     self.tblData.register(TblDataCell.self, forCellReuseIdentifier: "dataCell") 

     self.tblData.showsHorizontalScrollIndicator = false 
     self.tblData.showsVerticalScrollIndicator = false 
     self.view.addSubview(self.tblData) 
    } 

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

    // MARK:- TableView Datasource 
    // MARK:- 

    public func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat{ 
     return 60 
    } 

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

    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ 
     let dataCell : TblDataCell = tableView.dequeueReusableCell(withIdentifier: "dataCell") as! TblDataCell 

     dataCell.lblDataText.text = String("data cell #\(indexPath.row)") 

     return dataCell 
    } 

    public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){ 

     delegate?.addNewVC(Index: indexPath.row) 
    } 


} 

あなたがテーブルビューにメモリをアロケーションする必要が

enter image description here

+10

コントローラのビューに '' 'tableView'''をサブビューとして追加するのを忘れました。 – danypata

+0

"public"キーワードを削除してからお試しください。 –

+0

@danypata nice catch –

答えて

5

を逃しました

UITableViewまたはUICollectionViewに対してデリゲートメソッドが呼び出されないときは、通常、3つの主な理由があります。

1.最も一般的なのは、デリゲートが設定されていないため、nilです。この場合、デリゲートにはメソッドが呼び出されません(明らかに)。

2. numberOfRowsInSectionが0を返すか、numberOfSectionsが0を返します。この場合、これらのメソッドは呼び出されますが、他のメソッドは呼び出されません。これは問題をデバッグする良い方法です。

3. tableViewまたはcollectionViewはメインコントローラにサブビューとして追加されません。これは、開発者がストーリーボードまたはxibの代わりにコードを優先する場合に発生します。この場合、デリゲートは設定されていますが(nilではなく)、デリゲートからのメソッドは呼び出されません。もう1つのヒントは、テーブルビューのデフォルトデバイダが表示されないことです。

-2

右のセルを参照してください。

こんにちは。

var tblMenu: UITableView = UITableView() 

tblMenu.frame   = CGRectMake(0, 50, 320, 200);  tblMenu.delegate  = self 
tblMenu.dataSource = self 
tblMenu.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell") 

あなたは、私は多くの開発者は、私はそれの方法より多くの時間を持っていた彼らは、iOSの上で作業を開始する場合がありますし、正直だと思い、あなたの問題に対する一般的な答えを投稿します。この部分に

self.view.addSubview(tblMenu) 
+0

彼は '' viewDidLoad'''メソッドでテーブルビューを初期化しています。 – danypata

関連する問題