2016-11-03 9 views
-1

私は幸運なことなくしばらく探してきました。私はセクションを持つUITableViewでView Controllerの例を見つけようとしています。私が見てきた例はすべて、テーブルビューの内容を制御する同じビュー内にボタンが必要なため、使用できないテーブルビューコントローラを扱っています。誰もが例を持っている、例を知っている、あるいはそのような実装を考えている人はいますか?ありがとう。私は、ビューコントローラのテーブルビューを持っているSwift View Controller with UITableViewセクション

編集

、API呼び出しからデータを取得し、構造体の配列にセクションとデータを分離。私はそれをテーブルビューにバインドするために送信します。そうすること

を投げる[UIViewのにtableView:numberOfRowsInSection:]:認識されていないセレクタはインスタンスに

を送ったが、問題がどこにあるか私は理解していません。 tablview

//MARK: Tableview delegates 
func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    if let count = incidentDataSection?.count{ 
     return count 
    } 
    return 0 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if (incidentDataSection?.count)! > 0{ 
     return incidentDataSection![section].incidents.count 
    } 
    return 0 
} 

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
    return incidentDataSection?[section].title 
} 
/* 
func tableView(tableView: UITableView, iconForHeaderInSection section: Int) -> UIImage? { 
    return incidentDataSection?[section].icon 
}*/ 

//if clicked, will openn details view passing in the details 
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    //let incidentDetails = incidentData?[indexPath.row] 

} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    if let section = incidentDataSection?[indexPath.section] { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "IncidentTableViewCell") as! IncidentTableViewCell 
     cell.roadNameLabel.text = section.incidents[indexPath.row].RoadWay 
     cell.whenLabel.text = section.incidents[indexPath.row].DateCreated 
     cell.statusLabel.text = section.incidents[indexPath.row].DateCleared 
     return cell 
    } 
    return UITableViewCell() 
} 

incidentDataSectionため

コードは、セクションタイトルと異なる項目を有する構造体の配列です。私はいくつかのかなり良いフィードバックを受けたものの

回答

は、原因が実際にタイプミスでした。よく見ると

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
    return incidentDataSection?[section].title 
} 

あなたは、tableView:の前にアンダースコアがないことに気付くでしょう。何が起こっていたのかは、データソースとデリゲートが即座にコールの異なるプロトコルを使用している場合と使用していない場合の関数をスキップしていたことです。このlinkのおかげで、原因を突き止めることができました。これについて言及することを忘れて、私の悪いことはSwift 3にあった。誰もが時間を節約できたかもしれない。

+0

ビューコントローラにテーブルビューを追加する方法は知っていますか?一度それを行うと、セクションを持つかどうかは、ビューコントローラでもテーブルビューコントローラでも同じです。 – rmaddy

+0

はい、私はそれは単なるリストですが、私はセクションで動作するように挑戦に走っているときにテーブルビューを行って問題はありません。 –

+0

あなたの質問をあなたが試したことで更新してください。あなたのセクションを動かそうとしている問題を明確に説明してください。 – rmaddy

答えて

0

ビューコントローラでは、tableviewインスタンスが必要です。 UITableViewDelegate、UITableViewDataSourceのプロトコルをUITableViewControllerとしてビューコントローラに実装します。

XIBのtableviewをクラスのtableviewとバインドすることを忘れないでください。

見て、このサンプル:

class Sample01ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 
    var tableView: UITableView? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView?.delegate = self 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(true) 

     self.tableView?.reloadData() 
    } 

    // ... 
+0

これは本当に質問に答えません。問題は、テーブルビューをビューコントローラに追加するのではなく、テーブルビューでセクションを動作させることです。そしてあなたの答えには、テーブルビューを実際に動かすための関連する詳細がたくさんあります。そして、あなたはテーブルビューの 'dataSource'を設定するのを忘れました。 – rmaddy

0

あなたが必要なメソッドを実装していが、しかし、それはあなたが「サブクラス」する必要があるかのUITableViewのdelegatedataSourceに「subcribe」のように聞こえます。

class MyViewController : UIViewController, UITableViewDelegate, UITableViewDataSource { 
    @IBOutlet var tableView : UITableView! 
} 

を今、あなたはあなたがあなたのViewControllerにあなたのtableViewのデリゲートとデータソースを設定する必要がありますそれらのプロトコルを持っていること:使用することにより。ストーリーボードをドラッグアンドドロップするか、viewDidLoad()の中で行うことができます。なぜなら、他の開発者がデリゲートとデータソースが割り当てられているコードを開くのが簡単だからです。

@override func viewDidLoad() { 
    super.viewDidLoad() 
    tableView.delegate = self 
    tableView.dataSource = self 
} 

ViewControllerのデリゲートメソッドとデータソースメソッドが、そのtableViewに対して呼び出されます。その後、IBOutletsをUIButton/UILabel/UISwitchなどに追加して、そのView Controller内のテーブルビューを使用するだけでなく、ViewControllerで行うことができます。私は、UITableViewController/UICollectionViewController上でUIViewControllerを使用する自由が好きなので、tableView/collectionViewを全体ビューのサイズに設定しても、ほとんどの場合、このメソッドをUITableViews/UICollectionViewsで使用します。

*注numberOfRows()は必須ではありませんが、私は常にこの点も同じように上書きします。また、iOSの開発には新しかったので、もしあなたがまだいないのであれば、tableViewを取得してから次に見ていくことは、あなたのAPIからバックグラウンドスレッドでデータを引き出して、mainThreadをあなたのUI、DispatchQueue。これは、APIからイメージを表示する場合には、非常に重要です。

+0

Jacobに感謝します。デリゲートとデータソースをストーリーボードに接続しました。ちょうどもう一度確認され、彼らはまだそこにいる。あなたは私がiOSをかなり新しくしていることについて正しいです。一ヶ月しか進まないAPIに関する情報をありがとう –

+0

問題はありません。複数のスレッドで作業する場合は、競合状態を必ず監視してください。あなたは、複数のスレッドでたくさんのクールなことをすることができ、利用可能な場合はtableViewを満たすデータをアニメーション化することができます。クイックGoogle検索は、あなたには、その種のもののための良いTutsを与えるだろう、楽しいがあります:) –

関連する問題