• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c# - UISearchController 和 MvvmCross

[复制链接]
菜鸟教程小白 发表于 2022-12-13 11:19:08 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我想为我的应用程序 (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 中做什么?我需要将我的显示逻辑移到那里吗?



Best Answer-推荐答案


是的。 “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)updateSearchResultsForSearchControllerUISearchController *)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)dataFoundNSArray *)searchResults
{
    _searchResults = searchResults;
    [self.tableView reloadData];
}

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap