2016-06-29 4 views
0

Ich implementiere ein SearchView, um die Daten in meinem UITableView zu filtern. Ich bin in der Lage, erfolgreich zu suchen, das einzige Problem ist, wenn die UITableView-Daten gefiltert werden, die alten Zellen bestehen noch und die gefilterten überlappen sie, was mir eine chaotische Ausgabe gibt. Ich habe die Tabelle Quelle wie von meinen Antworten auf SO vorgeschlagen, aber immer noch nicht das Problem gelöst. HierUITableView mit SearchView lässt neue Zellen bei der Suche überlappen

ist, was Iam versuchen zu tun:

FilterController

Leere searchFiler_TextChanged (object sender, 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; 




     } 
    } 

Wie kann ich das lösen? Jede Hilfe wird geschätzt

Antwort

0

Haben Sie das gleiche Problem nach scroll? Ihre Zellen werden wiederverwendet, aber ich sehe keinen Code zum Entfernen zusätzlicher Unteransichten. Versuchen Sie, alle von Ihnen hinzugefügten Subviews zu entfernen, bevor Sie Zellen erneut verwenden.

Verwandte Themen