2015-01-12 4 views
0

사용자 정의 셀 클래스의 부울 값을 설정하여 사용자 정의 셀 내부의 함수를 활성화하려고합니다. 이것은 최선을 다해서 시도한 것입니다 :viewcontroller에서 사용자 정의 셀로 순간 데이터 전송

func blurViewActive(gestureRecognizer:UIGestureRecognizer) { 
    if (gestureRecognizer.state == UIGestureRecognizerState.Began) { 
     println("STATE BEGAN") 

     var point = gestureRecognizer.locationInView(self.tv) 
     if let indexPath = self.tv.indexPathForRowAtPoint(point) { 

      let data = messageList[indexPath.row] as Messages 
      let mcell: TableViewCell = self.tv.dequeueReusableCellWithIdentifier("cell") as TableViewCell 
      mcell.read = true 
     } 
    } 
} 

그러나 이것은 작동하지 않습니다.

class TableViewCell: UITableViewCell, UIGestureRecognizerDelegate { 

    @IBOutlet weak var labelOutl: UILabel! 

    var timer = NSTimer() 
    var counter = 10 

    var read = Bool() 

    @IBOutlet weak var dateLabel: UILabel! 
    override func awakeFromNib() { 
     super.awakeFromNib() 
     if read == true{ 
     println("hello") 
     } 
    } 

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


    } 
    func timerStarted(){ 
    timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "update", userInfo: nil, repeats: true) 
    } 
    func update(){ 
    println(--counter) 
    } 
} 

내 예상 결과를 한 번 내보기 컨트롤러에서 "true"로 설정되어 읽기로 awakeFromNib 기능 내부 함수가 즉시 실행해야된다 : 여기

내 사용자 정의 셀 클래스의 코드입니다 .

+0

이 문제가 해결되지 않는 이유는 무엇입니까? 예상되는 결과는 무엇입니까? 함수를 직접 호출 해 보았습니까? –

+0

@IanMacDonald 내보기 컨트롤러에서 "true"로 읽음을 설정하면 awakeFromNib 함수 내부의 함수가 즉시 실행되어야합니다. 위의 추가 정보를 참조하십시오. – martin

+0

이 작업을 수행하려면'TableViewCell'' func setRead'를 오버라이드해야합니다. 속성 값을 업데이트 할 때'awakeFromNib' 함수는 호출되지 않습니다. –

답변

0

여기에는 여러 가지 혼란스러운 점이있는 것 같습니다.

dequeueReusableCellWithIdentifier은 호출 된 테이블보기에서 사용할 셀을 반환합니다. 이것은 새로이 인스턴스화 된 셀이거나 현재 테이블의 보이는 행에 표시되지 않은 기존 셀입니다. 따라서이 셀에 read 속성을 설정하면 즉각적인 표시 효과가 나타나지 않습니다.

보이는 셀에 액세스하려면 cellForRowAtIndexPath을 사용할 수 있지만 해당 셀을 변경해도 반드시 UI가 업데이트되지는 않습니다. 대신 모델을 업데이트하여 해당 셀을 업데이트하고 reloadRowsAtIndexPaths을 호출하여 특정 셀을 업데이트하려고합니다.

또한 awakeFromNib은 새 셀이 만들어 질 때만 호출됩니다. 이는 dequeueReusableCellWithIdentifier에서 반환되기 전에 이루어 지므로 read 속성을 설정하는 것과 같은 조치를 취하기 훨씬 전에 완료됩니다. 또한 재사용 식별자를 사용하기 때문에 테이블이나 표시된 행에 한 번씩 호출되지 않습니다. 대신 표보기는 표시되는 각 행에 대해 적어도 하나의 셀을 작성하고 행 스크롤이 시야에 들어오고 보이지 않도록 다시 사용합니다. 이것은 생성 된 객체의 수를 최소화하면 메모리 사용을 줄이고로드를 줄여 스크롤 성능을 저하시킬 수 있기 때문에 편리합니다. 그러나 데이터 소스가 한 행에서 다음 행으로 재사용 될 때 이러한 셀을 업데이트 할 준비가 필요함을 의미합니다.

관련 문제