2017-10-05 30 views
0

이 문제로 3 일 동안 나를 미치게되었습니다. "셀"및 사용자 정의 클래스 "TransitoPalinaTableViewCell"나는 사용자 정의 셀 클래스 생성 :cellForRowAt에서 사용자 정의 테이블 셀 클래스가 작동하지 않음

class TransitoPalinaTableViewCell: UITableViewCell { 

@IBOutlet weak var lblOrario: UILabel! 
@IBOutlet weak var lblDestinazione: UILabel! 
@IBOutlet weak var lblNote: UILabel! 
@IBOutlet weak var lblBus: UILabel! 

override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
} 

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

    // Configure the view for the selected state 
} 

} 

을 내보기 컨트롤러에서 나는이있다 : 나는 테이블 뷰 셀 식별자를 설정 스토리 보드에서

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TransitoPalinaTableViewCell 

    // Configure the cell... 
    let hour = Int(self.transito.listaCorse[indexPath.row].tempoTransito)/3600 
    let mins = Int(self.transito.listaCorse[indexPath.row].tempoTransito % 3600)/60 

    cell.lblOrario?.text = String(format: "%02d:%02d", hour, mins) 
    cell.lblDestinazione?.text = self.transito.listaCorse[indexPath.row].arrivoCorsa 
    cell.lblNote?.text = "" 
    cell.lblBus?.text = self.transito.listaCorse[indexPath.row].automezzo 


    cell.backgroundColor = UIColor.init(red: 0, green: 60/255, blue: 113/255, alpha: 1) 

    return cell 
} 

을 .

문제는 cellForRowAt가 호출 될 때 나는 때문에 캐치되지 않는 예외 'NSInternalInconsistencyException'응용 프로그램 종료, 이유는 오류

을 가지고 있다는 것입니다 : '식별자 셀과 셀 를 큐에서 제거 할 수없는 - 펜촉을 등록해야합니다 또는 식별자의 클래스 또는 스토리 보드의 프로토 타입 셀을 연결하십시오. '

dequeueReusableCell 명령 줄에 있습니다.

필자는 다른 게시글에서 viewdidLoad()에 라인을 삽입하지 않았으므로 스토리 보드의 콘센트에 연결되지 않고 새로운 셀 모델을 만들 것입니다. TransitoPalinaTableViewCell 클래스 및 해당 콘센트를 다시 만들려고했지만 아무 것도 변경되지 않았습니다.

도움을 주시면 감사하겠습니다.

+0

을 사용 :

이있는 viewDidLoad에서이 같은 셀을 등록 테이블 뷰에서 프로토 타입 셀로 셀을 디자인 했습니까? – DonMag

+0

이 링크는 도움이 될 수 있습니다. https://stackoverflow.com/questions/540345/how-do-you-load-custom-uitableviewcells-from-xib-files –

+0

@DonMag 예. 내 스토리 보드에서 내 물건을 내 셀에 떨어 뜨려 테이블에 Dynamic Prototype 셀을 1 개 설정했습니다. – cicaletto79

답변

1

셀 클래스 또는 셀 닙으로 셀을 등록 할 수 있습니다.

tableView.register(UINib(name: "YourNibName", bundle: nil), forCellReuseIdentifier: "Cell") 

하지만 Xib 파일에 셀을 만든 경우에만 작동합니다. Storyboard에서 만든 것이라면, 내가 만든 ViewController가 아닌 그 셀을 다른 곳에서 사용하는 것이 불가능합니다.

+0

내가 넣어 귀하의 제안을 시도 cellNib = UINib.init하자 (nibName을 "셀", 번들 : 전무) self.tableView.register (cellNib, forCellReuseIdentifier : "셀") ​​내있는 viewDidLoad에서 을하지만 난 오류 "를 가지고 묶음으로 NIB를로드 할 수 없습니다 " – cicaletto79

+0

내가 쓴 것처럼 - 셀이 스토리 보드가 아닌 Xib에서 만들어진 경우 작동합니다. Xib 또는 Storyboard에 세포가 있습니까? –

+0

네 말이 맞아! 정말 고마워요! – cicaletto79

0

.xib 파일을 사용하여 새로운 CustomTableViewCell 클래스를 만들고이 파일을 사용하여 클래스. xB 파일의 Attributes Inspector에서 customCell을 식별자로 설정하고 테이블 뷰 컨트롤러의 스토리 보드에서 다른 식별자를 제거했습니다. ,

let cellNib = UINib.init(nibName: "CustomTableViewCell", bundle: nil) 
self.tableView.register(cellNib, forCellReuseIdentifier: "customCell") 

과 cellForRowAt에 나는 아마 분명히 네,하지만 단지 이유를 배제하기 위해 ... 스토리 보드에서

let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! CustomTableViewCell