2016-10-20 13 views
2

내 코드 위 내 모델 증상으로 IOS 목록을 작성해야합니다 :셀을 재사용하고 UISwitch를 활성 또는 비활성으로 설정하는 동안 ios listview가 첫 번째 행과 마지막 행을 설정합니다. 무엇이 잘못 되었습니까?

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> 
    UITableViewCell { 
     tableView.registerNib(UINib(nibName: "SymptomTableCell", bundle: nil), 
           forCellReuseIdentifier: "cell") 

     if let cell = tableView.dequeueReusableCellWithIdentifier("cell") 
      as? SymptomTableCell { 
      print(indexPath.row) 
      print(cell) 
      let symptom = symptoms[indexPath.row] 
      if Editor.isEditing { 
       cell.setDatasource(symptom, isSelected: 
        hasSymptom(symptomsEdit, oid: symptom.oid)) 
      } else { 
       cell.setDatasource(symptom, isSelected: cell.swItem.on) 
      } 
      cell.tag = Helper.random() 
      cell.backgroundColor = UIColor.clearColor() 
      cell.selectionStyle = UITableViewCellSelectionStyle.None 
      tableCells.append(cell) 
      return cell 
     } 
    return UITableViewCell() 
} 

first cell

last cell

은이 두 가지가 jQuery과 당신은 이해에 첨부 된 이미지를 볼 수 있습니다을 충족하는 내 객체 오류 :

import Foundation 
import EVReflection 

class Symptom: EVObject { 
    var oid = "" 
    var name = "" 
} 


import UIKit 

class SymptomTableCell: UITableViewCell { 

    var symptom: Symptom? 
    @IBOutlet weak var swItem: UISwitch! 
    @IBOutlet weak var lblItem: UILabel! 

    func setDatasource(symptom: Symptom, isSelected: Bool) { 
     self.symptom = symptom 
     lblItem.text = symptom.name 
     swItem.on = isSelected 
    } 
} 
+1

1) 호출하지 마십시오 'cellForRowAtIndexPath' 안에'registerNib'가 있습니다. 'viewDidLoad'에서 한 번 수행하십시오. 2)'dequeueReusableCellWithIdentifier'를 사용하지 마십시오. 'dequeueReusableCellWithIdentifier : forIndexPath :'를 사용하십시오. 'nil' 셀을 반환 할 수 없습니다. – rmaddy

+0

아마도 cellForRowAtIndexPath 내에서 registerNib를 호출하기 때문입니다. –

답변

0

몇 가지. rmaddy 코멘트에서 언급 한 바와 같이 첫째, 제거 :

tableView.registerNib(UINib(nibName: "SymptomTableCell", bundle: nil), 
          forCellReuseIdentifier: "cell") 

cellForRowAtIndexPath에서, viewDidLoad()에 갈 필요가.

둘째, 사용자 정의 셀 클래스 내에서 나는 prepareForReuse을 무시하고 오프 상태로 스위치를 설정 한 다음처럼 VC에 cellForRowAtIndexPath 필요에 따라 전원을 켜십시오 것입니다 귀하의 현재 위치 :

class SymptomTableCell: UITableViewCell { 

    var symptom: Symptom? 
    @IBOutlet weak var swItem: UISwitch! 
    @IBOutlet weak var lblItem: UILabel! 

    override func prepareForReuse() { 
     self.swItem.setOn(false, animated: false) 
    } 

    func setDatasource(symptom: Symptom, isSelected: Bool) { 
     self.symptom = symptom 
     lblItem.text = symptom.name 
     swItem.on = isSelected 
    } 

}