2016-06-29 6 views
0

UITableViewのデータをフィルタリングするためにSearchViewを実装しています。私は正常に検索することができますが、唯一の問題は、UITableViewデータがフィルタリングされ、古いセルがまだ存在し、フィルタリングされたものが重なり合っているために乱雑な出力が得られることです。私はSOの答えで示唆されているようにテーブルソースをクリアしましたが、まだ問題を解決していません。ここでSearchViewを使用したUITableViewは、新しいセルを検索時に古いセルと重複させます。

はIAMのがやろうとするものである:

FilterController

無効searchFiler_TextChanged(オブジェクト送信者、UISearchBarTextChangedEventArgs E) {

if (!string.IsNullOrEmpty(e.SearchText)) 
    { 
     ppTable.Source = null; 
     AppDelegate.filteredList = null; 

     ppTable.ReloadData(); 
     filteredModelList = filter(dupes, e.SearchText); 
     mAdapter = new PeoplePlacesSource(filteredModelList, ""); 
     ppTable.Source = mAdapter; 
     ppTable.ReloadData(); 
    } 
    else 
    { 
     ppTable.Source = null; 
     mAdapter = new PeoplePlacesSource(dupes, ""); 
     searchFiler.TextChanged += searchFiler_TextChanged; 
     mAdapter.TableRowSelected += mAdapter_TableRowSelected; 
     ppTable.Source = mAdapter; 
     ppTable.ReloadData(); 
    } 
} 

PeoplePlacesSource

public override UITableViewCell GetCell(UITableView tableView, Foundation.NSIndexPath indexPath) 
     { 


      cell = tableView.DequeueReusableCell("PeoplePlacesCell_Cell") as PeoplePlacesCell ?? PeoplePlacesCell.Create(); 
subList = userList.ElementAt(indexPath.Row); 



      cell.UpdatePeoplePlacesCell(subList); 
      return cell; 

     } 

PeoplePlacesCell

internal void UpdatePeoplePlacesCell(System.Linq.IGrouping<string, Models.EmployeeModel> subList) 
    { 
     var yPosition =15; 
     var xPosition = 10; 

     var imgDefault = new UIImageView(); 
     imgDefault.Frame = new CoreGraphics.CGRect(10, viewParent.Frame.Y, 60,60); 
     imgDefault.Image = UIImage.FromFile("ic_appicon.png"); 
     CALayer profileImageCircle = imgDefault.Layer; 
     profileImageCircle.CornerRadius = 28; 
     profileImageCircle.BorderWidth = 2; 
     profileImageCircle.BorderColor = new CoreGraphics.CGColor(211, 34, 41); 
     profileImageCircle.MasksToBounds = true; 
     imgDefault.ClipsToBounds = true; 
     viewParent.AddSubview(imgDefault); 


     var labelUserName = new UILabel(); 
     labelUserName.Frame = new CoreGraphics.CGRect(0, 0, viewContainer.Frame.Width, 30); 
     labelUserName.TextColor = UIColor.FromRGB(211, 34, 41); 
     labelUserName.Text = subList.Key ; 
     labelUserName.ClipsToBounds = true; 

     labelUserName.Font = UIFont.BoldSystemFontOfSize(17); 
     viewContainer.AddSubview(labelUserName); 



     var mList = subList.Take(5); 
     foreach (var employeeModel in mList) 
     { 
      var labelPlace = new UILabel(); 
      labelPlace.Frame = new CoreGraphics.CGRect(0, yPosition, viewContainer.Frame.Width, 50); 

      if (employeeModel.Place.Contains(",")) 
      { 
       labelPlace.Text = employeeModel.Place.Substring(0, employeeModel.Place.IndexOf(",")); 
      } 
      else 
      { 
       labelPlace.Text = employeeModel.Place; 
      } 
      labelPlace.Font = UIFont.FromName(labelPlace.Font.Name, 12f); 
      labelUserName.SizeToFit(); 
       labelPlace.ClipsToBounds = true; 
      viewContainer.AddSubview(labelPlace); 



      yPosition += 15; 




     } 
    } 

どうすれば解決できますか?任意のヘルプが評価されます

答えて

0

スクロール後に同じ問題がありますか?セルは再利用されますが、追加されたサブビューを削除するためのコードは表示されません。セルを再利用する前に、追加したすべてのサブビューを削除してみてください。

関連する問題