0

私はswiftを初めて使用し、テーブルビューにテキストラベルを表示しようとしていますが、表示されません。以下は私のファイルで、正常にビルドされます。

UI のツリー ネスト: --メイン ビュー コントローラー ----UI テーブル ビュー ------メイン ビュー コントローラー セル

テーブルを間違った場所にリロードしていると思い始めています。

事前に助けていただきありがとうございます!

self.mainTableView.reloadData() を削除すると、セルが表示されなくなります。現時点では、セルをクリックすることはできますが、セルは次のデバッガー行で応答します。

You selected Number 0 You selected Number 1 You selected Number 2

ここに画像の説明を入力

MainViewController.swift

import Foundation
import Locksmith
import UIKit
import Alamofire
import SwiftyJSON
import Alamofire
import JWTDecode

class MainViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var userFeed = [UserFeedRow]()


    @IBOutlet weak var mainTableView: UITableView!

    override func viewDidLoad() {

        mainTableView.registerClass(MainViewTableViewCell.self, forCellReuseIdentifier: "mainTableViewCell")

        mainTableView.delegate = self
        mainTableView.dataSource = self
        mainTableView.separatorStyle = UITableViewCellSeparatorStyle.None

    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.userFeed.count
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        println("You selected Number \(indexPath.row)")
    }

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->
        UITableViewCell {

        println("celler \(indexPath.row)")

        var cell:MainViewTableViewCell = self.mainTableView.dequeueReusableCellWithIdentifier("mainTableViewCell", forIndexPath:indexPath) as MainViewTableViewCell

        let feedRow = userFeed[indexPath.row]
        println(feedRow.title)
        cell.mainTableViewCellTitle?.text = feedRow.title

        return cell
    }

    override func viewDidAppear(animated: Bool) {

        // Alamofire GET user/user_feed
        // Display user feed in tableview inside of uiviewcontroller

        loadUserFeed()    

    }

    func loadUserFeed(){
        println("loadUserFeed")
        let api = API()
        api.getUserFeed(){
            responseObject, error in


            var json = JSON(responseObject!)

            if error == nil{

                // get feed
                var responseFeed  = json["feed"]
                //println(json)

                for (index: String, subJson: JSON) in responseFeed {
                    var aTitle = subJson["title"].stringValue                    
                    println(aTitle)

                    // save object to array here
                    var row = UserFeedRow(title: aTitle)

                    self.userFeed.append(row) // Appending userfeed
                }

                self.mainTableView.reloadData()
            }

        }

    }
}

カスタム TableView セル

import Foundation
import UIKit

class MainViewTableViewCell: UITableViewCell{


    @IBOutlet weak var mainTableViewCellBackgroundImage: UIImageView!

    @IBOutlet weak var mainTableViewCellTitle: UILabel!


    override func awakeFromNib() {
        super.awakeFromNib()

    }
    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

    }

}
4

1 に答える 1

1

コメントを回答に変換し、説明を追加します。

UITableViewCellカスタムsを扱うには、基本的に 2 つの方法があります。もう 1 つは、それらを個別に作成することです (カスタム クラス、カスタム NIB ファイル、またはカスタム クラス + NIB ファイルを使用)。

ストーリーボードでセルを作成するregisterClass:forCellReuseIdentifier:と、バックグラウンドでダンスが行われます。コードでこのメソッドを呼び出すと、ストーリーボード セルと既に作成されているカスタム クラスの間の接続が切断され、代わりにカスタム クラスからセルが作成されます。この場合、ビュー情報は含まれず、空にレンダリングされます。

追加のアドバイス: 特定のセルがアプリ内の 1 つよりも多くの場所に必要であると思われる場合は、NIB + クラス メソッドregisterNIB:forCellReuseIdentifier:を使用してセルを作成し、それを使用する場所で呼び出す方がよいでしょう。これにより、必要なストーリーボード ビューにセルをコピー アンド ペーストするのではなく (変更が必要な場合は、すべてのビューを個別に変更する必要があります)、アプリ全体で単一のビュー/NIB を維持できます。

于 2015-03-29T17:06:11.670 に答える