現在、xCode 6.3を使用してカスタムテーブルビューセルを作成しようとしていますSwift 1.2。cellforRowAtIndexPathメソッドで何らかの理由で、セル変数を設定できないようです。コンパイルされますが、次のコード行がヒットすると:
var cell:MessageCell = tableView.dequeueReusableCellWithIdentifier("messageCell") as! MessageCell
このエラーが発生します:タイプ 'UITableViewCell'(0x1112f5a18)の値を 'CampusExchange.MessageCell'(0x10e8318f0)にキャストできませんでした。
完全な方法は次のとおりです(メッセージの設定方法について疑問がある場合は、Parseを使用しています)。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:MessageCell = tableView.dequeueReusableCellWithIdentifier("messageCell") as! MessageCell
let message = messagesArray[indexPath.row]["Message"] as? String
cell.messageOutlet.text = message
return cell
}
ご協力ありがとうございます。これを機能させることができないようです。
このシナリオで確認できることがいくつかあります。
通常、@IBOutlet weak var tableView: UITableView!
によって、テーブルがクラスにリンクされているかどうかを確認します
カスタムテーブルビューセルの登録:self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
カスタムセルのクラスとIDが異なる場合でも、「UITableViewCell」と識別子「cell」を使用することに注意してください。
CellForRowAtIndexPathでセルをデキューします:let cell: MessageCell = self.tableView.dequeueReusableCellWithIdentifier("messageCell") as! MessageCell
これで、正しいセル識別子を使用します。
viewDidLoad()
methodでカスタムセルを登録します。
self.tableView.register(CustomCell.self, forCellReuseIdentifier: "Cell")
ViewDidLoad()で
// register custom table view cell from nib
self.tableView.registerNib(UINib(nibName: "MessageCell", bundle: nil), forCellReuseIdentifier: "messageCell")
Xコード9.4
ここでの一般的な回答の1つとは異なり、このソリューションはカスタムテーブルビューセルの悪夢を解決しました。ストーリーボードを使用していて、すべてが正しく接続されている場合、viewDidLoadにカスタムtableViewセルを登録する必要はありません。
viewDidLoadから削除:self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
同じエラーメッセージが表示されました。しかし、私にとっての問題は、インターフェイスビルダーでカスタムセルのクラスを設定しなかったことです。
カスタムセルクラス名とセルIDを同じままにします。
self.tableView.register(CustomCell.self, forCellReuseIdentifier: "CustomCell")
まず、CocoaClassを使用してセルクラスを再作成することをお勧めします。似たような間違いがありました-CollectionViewCellを作成し、自分の間違いを認識したら、親クラスの名前を変更することにしました。しかし、コンパイラは間違いに気付いていません。ビルド中にこのエラーが発生しました。
Swift 3の構文:
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
cocoaClass
を使用してクラスを再作成し、UItableViewCell
を選択します
私はこれが私のために働いた同じ問題を抱えていました。
同じエラーが発生しました。 obo2Oが彼のコメントで述べているように、彼のソリューションは私のために働いた: