web-dev-qa-db-ja.com

UITableViewCellにdetailTextLabel.textが表示されない-Swift

詳細(字幕)テキストは表示されません。ただし、println()呼び出しが追加されると、予想されるデータとともにOptional( "data")がコンソールに出力されるため、データは使用可能です。ストーリーボードでは、UITableViewControllerが適切なクラスに設定され、Table View Cell Styleが「Subtitle」に設定され、再利用識別子が「cell」に設定されます。表示する字幕情報を取得するにはどうすればよいですか?

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

    var cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell

    dispatch_async(dispatch_get_main_queue(), { () -> Void in

        cell.textLabel.text = self.myArray[indexPath.row]["title"] as? String
        cell.detailTextLabel?.text = self.myArray[indexPath.row]["subtitle"] as? String

        println(self.myArray[indexPath.row]["subtitle"] as? String)
        // The expected data appear in the console, but not in the iOS simulator's table view cell.

    })
    return cell
}
29
kurple

ここで同じ問題(私が読んだことから、おそらくiOS 8のバグ?)、これは私たちがそれを回避した方法です:

  1. ストーリーボードからプロトタイプセルを削除する

  2. この行を削除します。

var cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell

  1. 次のコード行で置き換えます。
 let cellIdentifier = "Cell" 
 
 var cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier)as? UITableViewCell 
 if cell == nil {
 cell = UITableViewCell(style:UITableViewCellStyle.Value2、reuseIdentifier:cellIdentifier)
} 

Swift 3.1の更新

let cellIdentifier = "Cell"

var cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier)
if cell == nil {
    cell = UITableViewCell(style: UITableViewCellStyle.value2, reuseIdentifier: cellIdentifier)
}

Swift 4.2-簡易版の更新

let cell = UITableViewCell(style: UITableViewCell.CellStyle.value2, reuseIdentifier: "cellId")
29
wpearse

コードは正常に見えます。ストーリーボードに移動して、tableviewのセルを選択します-> [属性インスペクター]に移動して、[字幕]のスタイルを選択します。

以下のスクリーンショットに従ってこれに従ってください。

Change this option

お役に立てば幸いです。

44
onCompletion

ストーリーボードからプロトタイプセルを引き続き使用する場合は、UITableViewcellスタイルをSubtitleとして選択します。それが動作します。

15
keshav

インターフェイスビルダーのセルなしでプログラムで行う場合、このコードはSwift 2.0+

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

    yourTableView.delegate = self
    yourTableView.dataSource = self
    yourTableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "subtitleCell")

}

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

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
    let cell: UITableViewCell = yourTableView.dequeueReusableCellWithIdentifier("subtitleCell", forIndexPath: indexPath) as UITableViewCell

    cell.textLabel?.text = "the text you want on main title"
    cell.detailTextLabel?.text = "the text you want on subtitle"

    return cell
}
6
ColossalChris

テキストをnil以外の値に設定しようとしたときにテキストをどこかにnilに設定している場合、テキストを含む実際のビューは失われます。これはiOS8で導入​​されました。代わりに、空のスペース@" "文字に設定してみてください。

これを参照してください: ITableViewCellの字幕は更新されません

4
Hugh Jeffner

enter image description here

これを試してみてください(Swift 5)

let cell = UITableViewCell(style: .value1, reuseIdentifier: "cellId")
cell.textLabel.text = "Déconnexion"
cell.imageView.image = UIImage(named: "imageName")

目標C:

UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cellId"];
4
Zouhair Sassi

価値のあることについて:詳細が表示されないという問題がありました。それは、tableViewセルを登録したためです。これは、セルのプロトタイプがストーリーボードで直接定義されたため、登録すべきではありませんでした。

2
claude31