다운 캐스팅 펜촉 uitableviewcell

teo751

내 앱의 경우 UI는 같지만 콘텐츠에 따라 각 셀에 대해 다른 기능가진 일반 셀 형식을 원합니다 . 이 작업을 수행하는 쉬운 방법은 ToggleCell이라는 @IBOutlets를 사용하여 uitableviewcell의 하위 클래스를 만드는 것이라고 생각했습니다.

class ToggleCell: UITableViewCell {
    // @IBOutlets here
}

그것의 클래스로 nib 파일을 만드십시오 . 그런 다음 TaskCell이라는 사용자 지정 기능을 사용하여 하위 클래스를 만들었습니다.

class TaskCell: ToggleCell {
    func load() {
        // do stuff
    }
}

그러나 cellForRowAtIndexPath에서 셀을 제거하면 다운 캐스팅이 실패합니다.

let cell = cellForRowAtIndexPath(...) as! TaskCell

내가 무엇을 잘못하고 있지? 이 작업을 더 잘 수행 할 수있는 방법이 있습니까?

그녀

registerClass메소드를 사용하여 테이블보기에 셀 클래스를 등록해야합니다 . 그러나 접근 방식에는 더 근본적인 문제가 있습니다. 단일 NIB는 이미 ToggleCell임의의 하위 클래스로 다운 캐스트 할 수없는 특정 셀 클래스 (수퍼 클래스 )를 정의합니다 . 대신해야 할 일은 셀의 사용자 정의 콘텐츠보기에 대한 NIB 및 클래스를 만들고 수퍼 클래스에로드하는 것입니다 ToggleCell.

class ToggleCellContentView: UIView {

    // Connect outlets in ToggleCellContentView.xib

    @IBOutlet weak var label: UILabel!

}

class ToggleCell: UITableViewCell {

    let view: ToggleCellContentView

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        // Load custom content view from NIB
        view = NSBundle.mainBundle().loadNibNamed("ToggleCellContentView",
            owner: nil, options: nil)[0] as! ToggleCellContentView

        super.init(style: .Default, reuseIdentifier: reuseIdentifier)

        // Add custom content view as subview
        contentView.addSubview(view)

        // Make custom content view span the cell
        view.setTranslatesAutoresizingMaskIntoConstraints(false)
        let viewDict = ["view": view]
        contentView.addConstraints(
            NSLayoutConstraint.constraintsWithVisualFormat("H:|[view]|", options: nil, metrics: nil, views: viewDict))
        contentView.addConstraints(
            NSLayoutConstraint.constraintsWithVisualFormat("V:|[view]|", options: nil, metrics: nil, views: viewDict))
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

class TaskCell: ToggleCell {

    func load() {
        // do stuff
    }

}

class OtherTaskCell: ToggleCell {

    func load() {
        // other do stuff
    }

}

그런 다음 테이블보기에 셀 클래스를 등록하십시오.

tableView.registerClass(TaskCell.self, forCellReuseIdentifier: "taskCell")
tableView.registerClass(OtherTaskCell.self, forCellReuseIdentifier: "otherTaskCell")

데이터 소스 메서드에서 deque

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let taskcell = tableView.dequeueReusableCellWithIdentifier("taskcell", forIndexPath: indexPath) as! TaskCell
    taskcell.view.label.text = "Row \(indexPath.row)"
    return taskcell
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

uitableviewcell 펜촉에 의존성 주입

분류에서Dev

내보기에서 내 콘센트에 액세스하기 위해 펜촉을 등록하려고합니다.

분류에서Dev

하나의 Uitableview에 두 개의 펜촉 UITableViewCell을 추가하는 방법

분류에서Dev

하나의 Uitableview에 두 개의 펜촉 UITableViewCell을 추가하는 방법

분류에서Dev

CRTP 및 다운 캐스팅

분류에서Dev

UITableViewCell 유형의 값을 "ActuTblCell"로 캐스팅 할 수 없습니다.

분류에서Dev

'UITableViewCell'유형의 값을 'PFTableViewCell'로 캐스팅 할 수 없습니다.

분류에서Dev

다른 펜촉을로드 할 때 iOS 자동 레이아웃

분류에서Dev

다른 펜촉을로드 할 때 iOS 자동 레이아웃

분류에서Dev

NSInternalInconsistencyException : 식별자에 대한 펜촉 또는 클래스를 등록하거나 스토리 보드의 프로토 타입 셀을 연결해야합니다.

분류에서Dev

식별자에 대한 펜촉 또는 클래스를 등록하거나 스토리 보드의 프로토 타입 셀을 연결해야합니다.

분류에서Dev

ITableViewCell에서 다운 캐스트? UITableViewCell에 옵션 만 언 래핑합니다.

분류에서Dev

다형성 대 다운 캐스팅

분류에서Dev

C ++에서 다운 캐스팅 문제

분류에서Dev

다운 캐스팅 안전성

분류에서Dev

iOS Swift : AnyObject 다운 캐스팅

분류에서Dev

C ++에서 상속 다운 캐스팅

분류에서Dev

Java 다운 캐스팅 ClassCastException 오류

분류에서Dev

다운 캐스팅 포인터

분류에서Dev

Swift에서 NSObject 다운 캐스팅

분류에서Dev

Swift 3 다운 캐스팅 JSON 사전

분류에서Dev

다운 캐스팅 사진 문제

분류에서Dev

다운 캐스팅 모범 사례 (C ++)

분류에서Dev

DataTable의 F # 다운 캐스팅 요소

분류에서Dev

Java의 암시 적 업 캐스팅 및 명시 적 다운 캐스팅

분류에서Dev

업 캐스팅 및 다운 캐스팅을 불법으로 만드는 것

분류에서Dev

TodoItemRow 식별자가있는 셀을 대기열에서 제거 할 수 없습니다-식별자에 대한 펜촉 또는 클래스를 등록하거나 스토리 보드의 프로토 타입 셀을 연결해야합니다. '

분류에서Dev

TodoItemRow 식별자가있는 셀을 대기열에서 제거 할 수 없습니다-식별자에 대한 펜촉 또는 클래스를 등록하거나 스토리 보드의 프로토 타입 셀을 연결해야합니다. '

분류에서Dev

Swift가 Cell 식별자로 셀을 대기열에서 빼낼 수 없음-식별자에 대한 펜촉 또는 클래스를 등록하거나 스토리 보드의 프로토 타입 셀을 연결해야합니다.

Related 관련 기사

  1. 1

    uitableviewcell 펜촉에 의존성 주입

  2. 2

    내보기에서 내 콘센트에 액세스하기 위해 펜촉을 등록하려고합니다.

  3. 3

    하나의 Uitableview에 두 개의 펜촉 UITableViewCell을 추가하는 방법

  4. 4

    하나의 Uitableview에 두 개의 펜촉 UITableViewCell을 추가하는 방법

  5. 5

    CRTP 및 다운 캐스팅

  6. 6

    UITableViewCell 유형의 값을 "ActuTblCell"로 캐스팅 할 수 없습니다.

  7. 7

    'UITableViewCell'유형의 값을 'PFTableViewCell'로 캐스팅 할 수 없습니다.

  8. 8

    다른 펜촉을로드 할 때 iOS 자동 레이아웃

  9. 9

    다른 펜촉을로드 할 때 iOS 자동 레이아웃

  10. 10

    NSInternalInconsistencyException : 식별자에 대한 펜촉 또는 클래스를 등록하거나 스토리 보드의 프로토 타입 셀을 연결해야합니다.

  11. 11

    식별자에 대한 펜촉 또는 클래스를 등록하거나 스토리 보드의 프로토 타입 셀을 연결해야합니다.

  12. 12

    ITableViewCell에서 다운 캐스트? UITableViewCell에 옵션 만 언 래핑합니다.

  13. 13

    다형성 대 다운 캐스팅

  14. 14

    C ++에서 다운 캐스팅 문제

  15. 15

    다운 캐스팅 안전성

  16. 16

    iOS Swift : AnyObject 다운 캐스팅

  17. 17

    C ++에서 상속 다운 캐스팅

  18. 18

    Java 다운 캐스팅 ClassCastException 오류

  19. 19

    다운 캐스팅 포인터

  20. 20

    Swift에서 NSObject 다운 캐스팅

  21. 21

    Swift 3 다운 캐스팅 JSON 사전

  22. 22

    다운 캐스팅 사진 문제

  23. 23

    다운 캐스팅 모범 사례 (C ++)

  24. 24

    DataTable의 F # 다운 캐스팅 요소

  25. 25

    Java의 암시 적 업 캐스팅 및 명시 적 다운 캐스팅

  26. 26

    업 캐스팅 및 다운 캐스팅을 불법으로 만드는 것

  27. 27

    TodoItemRow 식별자가있는 셀을 대기열에서 제거 할 수 없습니다-식별자에 대한 펜촉 또는 클래스를 등록하거나 스토리 보드의 프로토 타입 셀을 연결해야합니다. '

  28. 28

    TodoItemRow 식별자가있는 셀을 대기열에서 제거 할 수 없습니다-식별자에 대한 펜촉 또는 클래스를 등록하거나 스토리 보드의 프로토 타입 셀을 연결해야합니다. '

  29. 29

    Swift가 Cell 식별자로 셀을 대기열에서 빼낼 수 없음-식별자에 대한 펜촉 또는 클래스를 등록하거나 스토리 보드의 프로토 타입 셀을 연결해야합니다.

뜨겁다태그

보관