사용자 지정 셀이있는 UITableView 팝업을 표시하려고하지만 셀의 UILabel 아울렛은 항상 nil입니다. 스토리 보드를 사용하여 popover tableview 및 사용자 정의 셀을 작성했습니다. 모든 것이 제대로 연결되어 있고 내 맞춤 셀에 '셀'식별자가 있습니다. Popover가 올바르게 표시됩니다. 사용자 정의 셀의 레이블이 0이 아니기 때문에 레이블이 설정되지 않습니다.사용자 지정 셀이있는 UITableView popover가 셀 특성을 사용하여 항상 실패합니다.
저는 Apple 메서드 (아래 buttonFressed 함수 참조)와 UITableViewCell's attributes are nil when instantiating UITableView as a popover에 제안 된 segue 메서드를 사용하여 팝업 표시를 시도했지만 어느 것도 내 문제를 해결하지 못했습니다.
내 사용자 지정 UITableViewCell 클래스에는 연결된 레이블이 두 개 있고 연결되지 않은 int가 하나 있습니다.
다음class PopoverTableCell : UITableViewCell {
@IBOutlet var label1: UILabel! // <== connected in storyboard
@IBOutlet var label2: UILabel! // <== connected in storyboard
var int3 : Int? = nil
}
내가 (버튼 누름을 통해) 뷰 컨트롤러에서 (애플의 방법)을 제시하는 방법은 다음과 같습니다 : 모든 스토리 보드 연결이 유효한 것 성공적으로 팝 오버를 제공
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 기금의 반환 문에 중단 점을 넣어, 내가 디버거에서이 얻을 :
Debugger Image 상관없이 내가 뭘
의 LABEL1 및 라벨 2 출구는 항상 전무 하지만 int3 (콘센트가 아님)는 잘 작동하는 것 같습니다.
스토리 보드의 장면에 이러한 프로토 타입 셀이 있습니까? 스토리 보드에서 셀의 식별자를 설정하고 코드에서 셀을 등록해야합니다. 스토리 보드에서 만든 코드에는 셀을 등록 할 수 없습니다. – dan