[ios] 콘센트를 반복 콘텐츠 iOS에 연결할 수 없습니다

방금 앱을 만들고 @IBOutlet을 스토리 보드에 연결하기 시작했습니다. 기본 스타일을 사용하여 UITableViewCell 프로토 타입 셀의 레이블에 일부를 연결하고 있습니다. 연결하면 스토리 보드 에이 오류가 발생합니다.

TableViewController에서 UILabel 로의 detailText 아웃렛이 유효하지 않습니다. 콘센트는 반복 컨텐츠에 연결할 수 없습니다.

누군가 나를 도울 수 있습니까? 나는 항상 성공적인 방식으로 설정했지만 이번에는이 오류를 해결했습니다.



답변

테이블 뷰 셀 서브 클래스를 작성하고 프로토 타입의 클래스로 설정하십시오. 해당 클래스에 콘센트를 추가하고 연결하십시오. 이제 셀을 구성하면 콘센트에 액세스 할 수 있습니다.


답변

스토리 보드를 통해 제공되는 두 가지 유형의 테이블 뷰 셀이 있습니다. 이들은 동적 프로토 타입정적 셀입니다.

여기에 이미지 설명을 입력하십시오

1. 동적 프로토 타입

이름에서이 유형의 셀은 동적으로 생성됩니다. 스토리 보드가 아닌 코드를 통해 제어됩니다. 테이블 뷰의 대리자 및 데이터 소스를 사용하여 셀 수, 셀 높이, 셀 프로토 타입을 프로그래밍 방식으로 지정할 수 있습니다.

셀을 테이블보기로 끌면 셀 프로토 타입이 선언됩니다. 그런 다음이 프로토 타입을 기반으로 셀을 얼마든지 작성하고 cellForRow프로그래밍 방식으로 메소드를 통해 테이블보기에 추가 할 수 있습니다 . 이 방법의 장점은 모든 뷰를 직접 추가 한 각 셀을 만드는 대신 하나의 프로토 타입 만 정의하면된다는 것입니다 (정적 셀 참조).

따라서이 경우 셀 프로토 타입의 UI 요소를보기 컨트롤러에 연결할 수 없습니다. 하나의 뷰 컨트롤러 오브젝트 만 시작하지만 많은 셀 오브젝트가 시작되어 테이블보기에 추가 될 수 있습니다. 하나의 뷰 컨트롤러 연결로 여러 셀을 제어 할 수 없으므로 셀 프로토 타입을 뷰 컨트롤러에 연결하는 것은 의미가 없습니다. 그렇게하면 오류가 발생합니다.

여기에 이미지 설명을 입력하십시오

이 문제를 해결하려면 프로토 타입 레이블을 UITableViewCell객체 에 연결해야 합니다. A UITableViewCell는 또한 셀의 프로토 타입이므로 원하는 수의 셀 오브젝트를 시작할 수 있으며 각 오브젝트는 스토리 보드 테이블 셀 프로토 타입에서 생성 된보기에 연결됩니다.

여기에 이미지 설명을 입력하십시오

마지막으로, cellForRow메소드에서 UITableViewCell클래스 에서 사용자 정의 셀을 작성 하고 레이블로 재미있는 일을하십시오.

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "yourCellIdentifier") as! YourCell

    cell.label.text = "it works!"

    return cell
}

2. 정적 셀

반면에 정적 셀은 실제로 스토리 보드를 통해 구성됩니다. UI 요소를 각 셀로 드래그하여 작성해야합니다. 스토리 보드에서 셀 번호, 높이 등을 제어하게됩니다. 이 경우 스토리 보드에서 생성 한 것과 비교하여 휴대 전화와 완전히 동일한 테이블보기가 표시됩니다. 정적 셀은 페이지를 설정하는 데 더 자주 사용되며 셀은 많이 변경되지 않습니다.

정적 셀의 UI 요소를 제어하려면 실제로 해당 요소를보기 컨트롤러에 직접 연결하고 설정해야합니다.

여기에 이미지 설명을 입력하십시오


답변

테이블보기를 사용하여 설정 및 기타 옵션 (내장 설정 앱과 같은)을 표시 하는 경우 속성 관리자 아래 에서 테이블보기 내용정적 셀로 설정할 수 있습니다 . 또한 이렇게하려면 UITableViewController 인스턴스에 테이블 뷰를 포함시켜야합니다.


답변

또는 보기에서 객체를 참조하기 위해 IBOutlet 을 사용할 필요는 없습니다 . tableViewCell 의 Label에 Tag 값을 지정할 수 있습니다 ( 예 : Tag를 123으로 설정) (속성 관리자에서 수행 할 수 있음). 그런 다음

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

    let cell = tableView.dequeueReusableCell(withIdentifier: "someID", for: indexPath)

    let label = cell.viewWithTag(123) as! UILabel //refer the label by Tag

    switch indexPath.row {
    case 0:
        label.text = "Hello World!"
    default:
        label.text = "Default"
    }
    return cell
}


답변

나와 함께 UIViewcontroller, 그리고 그것에 사용자 정의 셀이있는 테이블 뷰가 있습니다. 나는에 UILabel의 내 출구를 매핑 UItableviewcell(가)에 UIViewController다음 오류가 발생했습니다.


답변

대부분의 사람들은 서브 클래 싱 UITableViewCell 이이 문제를 해결 한다고 지적했습니다 . 그러나 프로토 타입 셀 ( UITableViewCell )이 Apple에 의해 정의되어 있고 자신의 콘센트를 추가 할 수 없기 때문에 이것이 허용되지 않는 이유 입니다.


답변

때로는 Xcode가 올바르게 셀 콘센트 연결을 제어하지 못했습니다.

어떻게 든 현재 셀의 레이블 / 버튼이 다른 셀에 연결되어 있습니다.이 셀을 제거하면 오류가 사라집니다.