2016-06-01 4 views
1

UITabBarController에 UISplitViewController를 넣을 것입니다. UISplitViewController의 Tableview를 필터로 사용하기

enter image description here

나는 필터로 마스터보기를 사용하는 것을 시도하고있다. 그래서 cellAccessoryType을 체크 표시로 사용했습니다. 모두 중에서 하나만 선택할 수 있습니다. 내가 그럼 난, '전화' 그럼 컴백 탭 '계정'을 다른 탭으로 이동 한 후 내가 선택, '모든 계정'셀을 선택하면 내가이를 위해 쓴 코드는 '이제 비즈니스 계정

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    self.selectedIndex = indexPath.row 

    let cell:UITableViewCell = self.tableView.cellForRowAtIndexPath(indexPath)! 
    cell.accessoryType = .Checkmark 
    self.performSegueWithIdentifier("dispAccounts", sender: self) 
     } 
override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
    let cell:UITableViewCell = self.tableView.cellForRowAtIndexPath(indexPath)! 
    cell.accessoryType = .None 
} 
override func viewDidLoad() { 
    super.viewDidLoad() 
    filterList = ["All Accounts","Business Accounts","Person Accounts"] 
    self.tableView.allowsMultipleSelection = false 
    //self.splitViewController?.maximumPrimaryColumnWidth = 140; //This line is to restrict the width of master View of UISplitVC 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

// MARK: - Table view data source 

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    // #warning Incomplete implementation, return the number of sections 
    return 1 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    // #warning Incomplete implementation, return the number of rows 
    return 3 
} 


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("accountCell", forIndexPath: indexPath) 

    cell.textLabel?.text = filterList[indexPath.row] 
    return cell 
} 

입니다 '선택되고 체크 표시도 업데이트되지만 문제는'모든 계정 '셀의 체크 표시가 사라지지 않는 것입니다.

+0

'cellForRowAtIndexPath'에서 사용하는 코드를 표시 할 수 있습니까? 또한'UITableView'를 위해서'allowsMultipleSelection'을 활성화 시켰습니까? 활성화 하시겠습니까? – Kumuluzz

+0

필요한 코드 @Kumuluzz를 추가했습니다. 보세요. 아니요 .MultipleSelection을 허용하고 싶지 않습니다. 내가 틀린다고해도 같은 문제가 발생합니다 –

답변

1

이 버그는 UITableViewUITableViewCell에 구현 된 최적화로 인해 발생합니다. 이 두 가지 견해는 매우 효율적이며 Apple이 매우 효율적으로 만든 한 가지 방법은 항상 새로운 셀을 인스턴스화하는 대신 셀을 재사용하는 것입니다. 따라서 매번 새 셀을 인스턴스화하는 대신 dequeueReusableCellWithIdentifier을 호출하는 것입니다.

이 버그를 극복하기 위해 사용 될 때마다 셀을 재설정해야합니다. 당신이 UITableViewCell를 서브 클래 싱 된 경우

  • prepareForReuse 덮어 쓰기 (하지만 당신은 표준 UITableViewCell 사용하고 있기 때문에이 당신을 위해 옵션을 선택하지 않습니다)에 직접 속성을 재설정
  • 을 :

    은 두 가지 방법으로 수행 할 수 있습니다 cellForRowAtIndexPath

그래서 당신을 위해 가능한 솔루션은 다음과 같이 수 :

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    // Getting the cell 
    let cell = tableView.dequeueReusableCellWithIdentifier("accountCell", forIndexPath: indexPath) 

    // Resetting the cell 
    cell.textLabel?.text = "" 
    cell.selected = false 

    // Configuring the cell 
    cell.textLabel?.text = filterList[indexPath.row] 

    // Returning the finished cell 
    return cell 
} 
+0

좋은 아이디어 @Kumuluzz –

+0

그러나 @Kumuluzz 테이블보기를 완전히로드 한 다음 셀을 선택합니다. 이제 선택이되고 체크 마크가 표시됩니다. 그런 다음 탭을 전환하고 다시 전환했습니다. 이제 다른 셀을 선택하려고하면 다시 전환 할 때 테이블 뷰가 다시로드되지 않기 때문에 선택됩니다. –

+0

나는 또한 시도했다. 아이디어가 작동하지 않습니다. 나는 문제가 우리가 탭을 전환 할 때 테이블이 다시로드되지 않는다고 생각합니다. 새로운 아이디어가 있으면 알려주세요. 감사의 말 : –