Ich habe eine UITableView
und eine UISearchBar
. Wenn die App geladen wird, übergebe ich eine bestimmte Liste an die Tabellenquelle. Wenn ich eine Abfrage in UISearchBar
eingeben und auf die Schaltfläche Suchen klicke, mache ich einen API-Aufruf, um eine neue Liste zu holen.Ändern UITableView Datenquelle auf UISearchBar Suchschaltfläche klicken
Jetzt möchte ich die Quelle des Tableview durch die neue Liste ersetzen, die ich von der API abhole.
Ich kann die Liste gefiltert zunächst auf UISearchView
Text ändern, aber ich möchte eine komplett neue Liste auf die Tabelle auf der Suche klicken Sie auf klicken.
Gibt es eine Möglichkeit, die Tabellenquelle mit der neuen Liste mit der UISearchView
ändern? oder muss ich eine benutzerdefinierte Suchleiste erstellen?
Ich habe versucht, einen Null-Wert an die Tabellenquelle übergeben und dann die neue Liste übergeben, aber das tut nichts.
Jede Hilfe ist willkommen
EDIT
MytableViewController
Initialize()
{
if (!string.IsNullOrEmpty(savedRelatedList))
{
if (CrossConnectivity.Current.IsConnected)
{
loadingOverlay = new LoadingOverlay(UIScreen.MainScreen.Bounds, message);
this.View.Add(loadingOverlay);
//Fetch Related People
var relatedData = await O365Service.GetRelatedPeople(GRAPH_ACCESS_TOKEN);
if (relatedData != null)
{
relatedPeopleList = relatedData.Value.Where(d => !string.IsNullOrEmpty(d.userPrincipalName) && (!d.userPrincipalName.Equals(my_email))).ToList(); ;
if (relatedPeopleList != null && relatedPeopleList.Count > 0)
{
NSUserDefaults.StandardUserDefaults.SetString(JsonConvert.SerializeObject(relatedPeopleList.ToList()), "RelatedList");
}
else
{
relatedPeopleList = null;
}
}
else
{
}
loadingOverlay.RemoveFromSuperview();
}
else
{
DialogHelper.CreateAndShowDialog("Network Error", "Check your internet connectivity");
}
}
relatedPeopleList = new List<PeopleRelated>();
relatedPeopleList.Add(new PeopleRelated { displayName = "Test", });
searchNewPeopleBar.CancelButtonClicked += delegate
{
searchNewPeopleBar.Text = "";
isSearch = false;
peopleList = null;
tablePeopleSearch.ReloadData();
searchNewPeopleBar.ResignFirstResponder();
};
var dataSource = new PeopleSearchSource(this);
tablePeopleSearch.Source = dataSource;
searchNewPeopleBar.SearchButtonClicked += SearchBar_SearchButtonClicked;
}
searchNewPeopleBar.CancelButtonClicked += delegate
{
searchNewPeopleBar.Text = "";
isSearch = false;
peopleList = null;
tablePeopleSearch.ReloadData();
searchNewPeopleBar.ResignFirstResponder();
};
private async void SearchBar_SearchButtonClicked(object sender, EventArgs e)
{
var searchText = searchNewPeopleBar.Text;
if(string.IsNullOrEmpty(searchText))
{
isSearch = false;
}
isSearch = true;
//Make api call and get new list
tablePeopleSearch.ReloadData();
}
PeopleSearchSource
public override nfloat GetHeightForRow(UITableView tableView, Foundation.NSIndexPath indexPath)
{
return 150;
}
public override nint RowsInSection(UITableView tableview, nint section)
{
if(peopleHomeController.isSearch)
{
return peopleHomeController.peopleList.Count;
}
else
{
return peopleHomeController.relatedPeopleList.Count;
}
}
public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
cell = peopleHomeController.tablePeopleSearch.DequeueReusableCell("people_search_cell") as PeopleSearchCell;
if(peopleHomeController.isSearch)
{
var data = peopleHomeController.peopleList.ElementAt(indexPath.Row);
cell.UpdateCell(data);
}
else
{
var data = peopleHomeController.relatedPeopleList.ElementAt(indexPath.Row);
cell.UpdateCell(data);
}
return cell;
}
können Sie Objective-C-Code zu verstehen? – KKRocks
@KKRocks Ja kann ich :) – user3034944
Nutzen Sie enums und manipulieren Sie die Datenquelle entsprechend. –