【问题标题】:Monotouch.Dialog: Automatic searching disabled when ScopeBar enabledMonotouch.Dialog:启用 ScopeBar 时禁用自动搜索
【发布时间】:2013-01-27 19:27:38
【问题描述】:

当我启用 ScopeBar 并在 Monotouch.Dialog 控件上连接 SelectedScopeButtonIndexChanged 时,自动搜索功能会在您启用时启用设置 EnabledSearch=true 已禁用。

以下是它被禁用的方式:

     UISearchBar sb = SearchBar;
     if (sb != null)
     {
        sb.ScopeButtonTitles = new string[] { "Girl".t(),"Boy".t(),"All".t() };
        sb.ShowsScopeBar = true;
        sb.SizeToFit();
        // THIS NEXT LINE KILLS SEARCH, remove to make it all work again
        sb.SelectedScopeButtonIndexChanged+= (sender, e) => {Update();};
     }

【问题讨论】:

    标签: iphone ios uitableview xamarin.ios monotouch.dialog


    【解决方案1】:

    中断搜索的原因是 DialogViewController 在 UISearchBar 上分配了一个自定义 UISearchBarDelegate。

    当您连接到一个事件时,它会破坏委托并将其替换为一个特殊的 UISearchBarDelegate,它将所有委托方法转发给事件。

    换句话说,您不能在同一个控件上混合和匹配委托与事件。

    一种可能的解决方案(如果您不想修补 MonoTouch.Dialog 本身)是用您自己的自定义 UISearchBarDelegate 替换现有的 sb.Delegate ,它可以实现 SearchScope 方法并将其他所有内容转发到已经存在的 UISearchBarDelegate之前设置的。

    例如:

    public class MySearchBarDelegate : UISearchBarDelegate
    {
        UISearchBarDelegate original;
        MyDialogViewController dvc;
    
        public MySearchBarDelegate (MyDialogViewController dvc, UISearchBarDelegate original)
        {
            this.original = original;
        }
    
        public override void SelectedScopeButtonIndexChanged (UISearchBar searchBar, int selectedScope)
        {
            dvc.Update ();
        }
    
        public override void OnEditingStarted (UISearchBar searchBar)
        {
            original.OnEditingStarted (searchBar);
        }
    
        public override void OnEditingStopped (UISearchBar searchBar)
        {
            original.OnEditingStopped (searchBar);
        }
    
        public override void TextChanged (UISearchBar searchBar, string searchText)
        {
            original.TextChanged (searchBar, searchText);
        }
    
        public override void CancelButtonClicked (UISearchBar searchBar)
        {
            original.CancelButtonClicked (searchBar);
        }
    
        public override void SearchButtonClicked (UISearchBar searchBar)
        {
            original.SearchButtonClicked (searchBar);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多