2017-03-03 9 views
0

Xcode 버전 8.2.1 (8C1002)을 사용하고 있습니다. 따라서 Swift 3은 기본 셀 이외의 셀을 사용하여 테이블 뷰를 만들려고합니다. 셀 detailTextLabel 또는 셀 imageView를 nil 이외가되게하십시오.detailTextLabel 및 imageView가 테이블 뷰 셀에 액세스 할 수 없음

유니버설 장치에서 프로젝트의 배포 대상을 9.0으로 설정했습니다.

인터페이스 작성기에서 1 Prototype Cell로 동적 프로토 타입으로 컨텐츠를 설정했습니다.

인터페이스 작성기에서 이미지 "animal08.png"및 식별자 "PlayerCell"을 사용하여 해당 테이블보기 셀 스타일을 "세부 정보"로 설정했습니다. 테이블 뷰에 대한 뷰 제어기

에서 무시 FUNC에있는 viewDidLoad()

self.tableView.register (UITableViewCell.self, forCellReuseIdentifier "PlayerCell")

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell:UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "PlayerCell")! 
    print(cell.subviews.count) 
    cell.textLabel!.text = "Name: " + myNames[indexPath.row] 
    cell.detailTextLabel!.text = "Ranking: " + myRankings[indexPath.row].description 
    let avatarIndex = indexPath.row + 1 
    let avatarIndexName = "animal0" + avatarIndex.description 
    cell.imageView!.image = UIImage.init(named: avatarIndexName) 

    return cell; 
} 
! 내가 아이폰 5 아이폰 OS 5.2 (13C75) 시뮬레이터에서 프로그램을 실행할 때 나는 "cell.detailTextLabel는 .text 문에 도착하면

, 내가 얻을 :

"치명적인 오류 : 예기치 않게 선택 값을 언 래핑하는 동안 nil을 찾을 수 없습니다"

마찬가지로 imageView 속성에 액세스하려고하면 nil이 검색됩니다.

확실히 print (cell.subviews.count) 문은 셀의 하위보기가 하나만 있음을 나타냅니다. 인터페이스 빌더 또는 init (style : UITableViewCellStyle, reuseIdentifier : String?) 이니셜 라이저를 통하지 않고 UITableViewCell의 set 또는 UITableViewCellStyle 속성을 볼 수 있습니다.

나는 init 메소드를 사용하면 dequeueReusableCell의 이점을 누릴 수 있다고 생각합니다.이 상황에서는 사용하지 말아야합니다.

나는 tableview.register 메서드가 tableViewCellStyle을 기본값으로 다시 읽었다는 것을 (실증없이) 읽었습니다.

위의 코드는 Apple 개발자 사이트의 상용구 코드 및 다양한 작성자의 다양한 자습서와 동일합니다.

그래서 어떻게 detailTextLabel 및 imageView 하위 뷰에 액세스하고 대기열에 남아있는 셀을 사용할 수 있습니까?

+0

이미지보기 및 두 개의 레이블이있는 사용자 정의 테이블보기 셀을 만들거나 uitableviewcell의 스타일을 변경하십시오. –

+0

"세부 사항보기"테이블보기 셀에 세부 텍스트 레이블이 없습니다. 올바른 세부 항목을 설정할 수 없습니다. (위의 코드가 아니라면 이미지보기를 설정 한 경우) @Fahad는 사용자 정의를 만들 것을 제안 할 때 절대적으로 적합합니까? 테이블보기 세포. – HAS

답변

0

셀 스타일을 UITableViewCellStyleDefault 이외의 값으로 변경해야합니다. AFAIK 상황에서도 랩핑 해제가 필요하지 않습니다. UITableViewCell 추가해야합니다 (및 기본 파단이) 당신에게 모든 서브 뷰와 같은 사용 가능한 값을 제공하지 않습니다 cell.subviews.count 인쇄 그런데

-contentView (셀 속성 내부 : 당신이 시도 다른 물건에 대해서는

).

또한 -initWithStyle:reuseIdentifier:을 사용하여 초기화 된 셀을 사용하면 재사용 메커니즘을 사용할 수있을뿐만 아니라 필요한 셀 스타일을 동시에 지정할 수 있으므로 추가 단점이 없습니다.인터페이스 빌더에 지정된 속성으로 스토리 보드 정의 셀을 재사용 할 때 실제로 대기열 제거가 더 중요합니다.

+0

그럼 난 그냥 스위프트 놀이터에서 테스트했고 코드는'.default' 스타일을 비롯한 코드 충돌로, 모든 가능한 셀 스타일과 꽤 잘 작동합니다. '''수입 UIKit 수입 PlaygroundSupport 하자 c = UITableViewCell (style : .value2, reuseIdentifier :? 무기 호) c.backgroundColor = UIColor.white c.textLabel는 .text = "텍스트" c.detailTextLabel는 .text = "상세" PlaygroundPage.current.liveView = c''' – michi

관련 문제