gpt4 book ai didi

c# - UISearchController 和 MvvmCross

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:40:20 25 4
gpt4 key购买 nike

我想为我的应用程序 (IOS8) 添加搜索逻辑。我有简单的 MvxTableViewController 并通过 UITableViewSource 显示我的数据。这是:... Controller :

    MvxViewFor(typeof(MainViewModel))]
partial class MainController : MvxTableViewController
{
public MainController(IntPtr handle) : base(handle) { }


public override void ViewDidLoad()
{
base.ViewDidLoad();


// make background trasnsparent page
this.View.BackgroundColor = UIColor.Clear;
this.TableView.BackgroundColor = UIColor.Clear;
this.NavigationController.NavigationBar.BarStyle = UIBarStyle.Black;

this.SetBackground ();

(this.DataContext as MainViewModel).PropertyChanged += this.ViewModelPropertyChanged;
}

private void SetBackground()
{
// set blured bg image

}

private void ViewModelPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
var viewModel = this.ViewModel as MainViewModel;
if (e.PropertyName == "Title")
{
this.Title = viewModel.Title;
}
else if (e.PropertyName == "Topics")
{
var tableSource = new TopicTableViewSource(viewModel.Topics);
tableSource.TappedCommand = viewModel.NavigateToChildrenPageCommand;

this.TableView.Source = tableSource;
this.TableView.ReloadData();
}
}

我阅读了 IOS 中的搜索并为 IOS8 应用程序选择了 UISearchController。但我不明白,如何将此 Controller 添加到我的 View 中:(我从 Xamarin (TableSearch) 中找到了示例 - 但他们不使用 UITableViewSource 并且我不明白我应该如何处理它。我尝试添加 Controller :

this.searchController = new UISearchController (this.searchTableController) 
{
WeakDelegate = this,
DimsBackgroundDuringPresentation = false,
WeakSearchResultsUpdater = this,
};

this.searchController.SearchBar.SizeToFit ();
this.TableView.TableHeaderView = searchController.SearchBar;

this.TableView.WeakDelegate = this;
this.searchController.SearchBar.WeakDelegate = this;

在this.searchTableController中我应该做什么?我需要将我的显示逻辑移到那里吗?

最佳答案

是的。 “searchTableController”应该负责搜索结果的呈现。

Here is the test project (native, not xmarin) which help you understand.

searchController 管理一个“searchBar”和“searchResultPresenter”。他不需要添加到运营商 Controller 的 View 层次结构中。当用户开始在“searchBar”中键入文本时,“SearchController”会自动为您显示 SearchResultPresenter。

步骤:1) 使用 SearchResultsPresenterController 实例化搜索 Controller 。

2) 当用户在搜索栏中输入文本时,您应该为搜索调用您自己的服务。下面是一个代码示例..

#pragma mark - UISearchResultsUpdating

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController
{
NSString *searchString = searchController.searchBar.text;

if (searchString.length > 1)
{
// TODO - call your service for the search by string
// this may be async or sync
// When a data was found - set it to presenter
[self.searchResultPresenter dataFound:<found data>];
}
}

3) 在搜索presenter中需要在方法“dataFound:”中重新加载一个表

- (void)dataFound:(NSArray *)searchResults
{
_searchResults = searchResults;
[self.tableView reloadData];
}

关于c# - UISearchController 和 MvvmCross,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31556222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com