2016-07-08 1 views
0

셀의 accessoryType에 체크 표시를 사용하는 tableViewCell이 있습니다. 나는 셀의 내용을 textField에 넣는 기능을 가지고 있고, 체크되지 않은 경우 텍스트 필드에서 텍스트를 제거한다.TableView 선택한 셀 - 시야 밖으로 스크롤하여 새 셀을 확인하면 체크 표시가 사라짐

잘 작동하는 것처럼 보입니다. 그러나 셀을 검사하여 보이지 않는 셀 (IOW)을 확인하려면 tableView를 스크롤해야합니다. 셀이 선택되었는지 (현재 보이지 않음) 자체를 선택 취소 한 것 같습니다 새로운 보이는 셀을 확인할 때만).

다중 선택은 보이는 셀에서만 작동합니다. 내가 적절하게 자신을 설명하고 희망

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier(textCellIdentifier, forIndexPath: indexPath) 
    let row = indexPath.row 
    cell.textLabel?.text = painArea[row] 
    cell.accessoryType = .None 
    return cell 
    } 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    //selectedRow = indexPath 
    tableView.deselectRowAtIndexPath(indexPath, animated: true) 
    let row = indexPath.row 
    let cell = tableView.cellForRowAtIndexPath(indexPath) 
     if cell!.accessoryType == .Checkmark { 
      cell!.accessoryType = .None 
     } else { 
      cell!.accessoryType = .Checkmark 
     } 
    populateDescription() 
    print(painArea[row]) 
} 

var painDescription = ["very sore"] 

func populateDescription() { 
    painDescription.removeAll() 
    severityText.text = "" 
    for cell in tableView.visibleCells { 
     if cell.accessoryType == .Checkmark { 
      painDescription.append((cell.textLabel?.text)! + " ") 
     } 
     var painArea = "" 
     var i = 1 

     while i <= painDescription.count { 
      painArea += painDescription[i-1] + "~" 
      i = i + 1 
     } 
     severityText.text = painArea 

    } 

:

여기 내 코드입니다. 보이지 않는 셀을 선택 해제하지 않으려면 텍스트 필드에서 제거하지 않는 것이 좋습니다.

모든 아이디어가 가장 만족 스러울 것입니다.

종류는

웨인

과 관련
+0

게시하시기 바랍니다 cellForRowAtIndexPath 방법 .. –

+0

FUNC에있는 tableView (있는 tableView : jQuery과, cellForRowAtIndexPath indexPath : NSIndexPath) ->있는 UITableViewCell { 수 있도록 세포 = tableView.dequeueReusableCellWithIdentifier (textCellIdentifier, forIndexPath : indexPath) 하자 행 = indexPath.row 세포 .textLabel?는 .text = painArea [행] cell.accessoryType = .None 반환 세포 } – Wayne

+0

세포를 확인하기위한 당신의 cellForRowAtIndexPath 방법의 경우 - 다른 조건을 추가가 확인 표시 여부를 가지고있다. 예, 그렇다면 accesoryType을 추가합니다. 그렇지 않으면 .none ..checkmark를 추가하십시오. –

답변

1

Cell 재사용으로 인해 문제가 발생합니다. didSelectCheckmark을 설정하는 대신 cellForRowAtIndexPath으로 설정하십시오. 또한 당신은 이제 당신의 문제

class ModelClass: NSObject { 
    var isSelected: Bool = false 
    //Declare other property that you are using cellForRowAtIndexPath 
} 

를 해결 아래와 같이 cellForRowAtIndexPathisSelected을 확인하려면이 같은 model 클래스를 작성해야합니다.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier(textCellIdentifier, forIndexPath: indexPath) 
    let row = indexPath.row 
    let modelClass = painArea[row] 
    cell.textLabel?.text = modelClass.name 
    if modelClass.isSelected { 
     cell.accessoryType = .Checkmark 
    } 
    else { 
     cell.accessoryType = .None 
    } 
    return cell 
} 

지금이 당신을 도울 것이

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    var modelClass = painArea[indexPath.row] 
    modelClass.isSelected = !modelClass.isSelected 
    self.tableView.reloadData() 
    populateDescription() 
    print(painArea[row]) 
} 

희망처럼 didSelect을 변경합니다.

0

유 뷰에서 셀을 스크롤하고 다시 스크롤 할 때마다, 당신은을 만들 수 있습니다 무엇을해야, 다시 cellForRow를 호출하고 다시 기본에 이르기까지 모든 설정됩니다 때문입니다 제대로 dataSource 때마다 세포가 검사되면 Bool로 데이터 소스를 업데이트하여 확인한 다음 다시 설정합니다. cellForRow 또는 cellWillDisplay

+0

내 cellForRowAtIndexPath에 : accesoryType as .None이 있습니다. 나는 이것을 주석 처리했으며 작동하는 것으로 보인다. @ Dev.RK 내 cellForRowAtIndexPath 메서드를 게시 할 것을 요청하여 나를 도왔습니다 – Wayne

+0

그 연습은 UI를 유지하기위한 것입니다, 당신의 데이터 소스가 아니라 UI 자체를 업데이트해야합니다. Nirav의 대답은 그 일을 할 때 기본을 보여줍니다. – Tj3n