私はUITableViewポップオーバーをカスタムセルで表示しようとしていますが、セルのUILabelアウトレットは常にnilです。ストーリーボードを使用してポップオーバーテーブルビューとカスタムセルを作成しました。すべてが正しく接続されているように見えます。カスタムセルには「セル」という識別子があります。 popoverは正しく表示されます。カスタムセルのラベルは、nilなので設定されません。カスタムセルを持つUITableViewポップオーバーはセル属性で常に失敗する
私は、アップルメソッド(下記のbuttonPressed関数を参照)とUITableViewCell's attributes are nil when instantiating UITableView as a popoverで提案されているsegueメソッドを使用してポップオーバーを提示しようとしましたが、どちらも問題は解決しませんでした。
私のカスタムUITableViewCellクラスには、2つの接続ラベルと1つの未接続intがあります。すべてのストーリーボードの接続は有効なようです:
class PopoverTableCell : UITableViewCell {
@IBOutlet var label1: UILabel! // <== connected in storyboard
@IBOutlet var label2: UILabel! // <== connected in storyboard
var int3 : Int? = nil
}
は、ここで私は(ボタンプッシュ経由)ビューコントローラから(Appleのメソッド)を提示方法は次のとおりです。
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
@IBAction func buttonPressed(_ sender: UIButton) {
let popoverController = PopoverController()
popoverController.modalPresentationStyle = UIModalPresentationStyle.popover
popoverController.preferredContentSize = CGSize(width: 200, height: 300)
present(popoverController, animated: true, completion: nil)
let popoverPresentationController = popoverController.popoverPresentationController
popoverPresentationController?.sourceView = sender
popoverPresentationController?.sourceRect = CGRect(x: 0, y: 0, width: sender.frame.size.width, height: sender.frame.size.height)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
私がしようとすると、成功したポップオーバーが表示されますが、そのセルにラベルを設定すると、ラベルが常にnilであるために失敗します。
class PopoverController : UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
// it makes no difference if I set these or not - storyboard does it for me
self.tableView.delegate = self
self.tableView.dataSource = self
// if I don't register, the cell fails to deque
self.tableView.register(PopoverTableCell.self, forCellReuseIdentifier: "Cell")
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! PopoverTableCell
cell.backgroundColor = UIColor.yellow
cell.label1?.text = "Label 1111"
cell.label2?.text = "Label 2222"
cell.int3 = 5555
print("label1: \(cell.label1)") // <== always nil
print("label2: \(cell.label2)") // <== always nil
print("label3: \(cell.int3)") // <== always Optional(5555) which is correct
return cell
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 4
}
}
私はcellForRowAt基金のreturn文にブレークポイントを入れて、私は、デバッガでこれを取得する:
Debugger Imageどんなに私は何をすべきか
、LABEL1とLABEL2コンセントは常にゼロint3(コンセントではない)はうまく動作しているようです。
ストーリーボードのシーンのプロトタイプセルはありますか?ストーリーボード内のセルの識別子を設定し、コード内にセルを登録する必要はありません。ストーリーボードで作成したコードにセルを登録することはできません。 – dan