在UISearchbar搜索按钮上更改UITATIONVIEW数据源单击



我有一个 UITableViewUISearchBar。当应用程序加载时,我将某个列表传递给表源。当我在UISearchBar中输入查询并命中搜索按钮时,我将进行一个API调用以获取新列表。

现在,我想用我从API获取的新列表替换TableView的源。

我可以过滤最初在UISearchView文本更改上传递的列表,但是我想向搜索按钮上的表提供全新的列表。

有什么方法可以使用UISearchView使用新列表更改表源?还是我需要创建自定义搜索栏?

我尝试将零值传递到表源,然后传递新列表,但这无能为力。

任何帮助都将受到赞赏

编辑

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;
            }

您需要在搜索栏委托上管理标志。

搜索栏委托

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{
    searchBar.text = @"";
    isSearch = NO ;
    [arrFilter removeAllObjects];
    [searchTblView reloadData];
    [searchBar resignFirstResponder];
}
-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
    NSLog(@"search text :%@",searchBar.text);
    NSCharacterSet *whitespace = [NSCharacterSet whitespaceAndNewlineCharacterSet];
   NSString *strSearch = [searchBar.text stringByTrimmingCharactersInSet:whitespace];
    isSearch = YES;
    if ([strSearch isEqualToString:@""]) {
        isSearch = NO;
    }
    // call api here and reload tableview
}

tableview委托

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    if (isSearch) {
        return arrFilter.count;;
    }
    return arrMain.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSString *identifier = @"searchCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    NSString *strname = [isSearch ? arrFilter :arrMain  objectAtIndex:indexPath.row ]; // change your array here
    UILabel *lblRecipeName = (UILabel *)[cell viewWithTag:101];
    lblRecipeName.text = strname;
    return cell;
}

最新更新