2013-01-27 1 views
2

을 활성화하고 EnabledSearch = 사실 을 설정할 때까지 와이어하는 Monotouch.Dialog 제어에 사용 가능 자동 검색 기능을을 SelectedScopeButtonIndexChanged 때 자동 해제 검색이 비활성화되었습니다.Monotouch.Dialog : 나는 <strong>ScopeBar</strong> 사용하면 ScopeBar이

여기가 무효가되어, 방법은 다음과 같습니다 DialogViewController가 UISearchBar에 사용자 정의 UISearchBarDelegate를 할당하기 때문에

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

답변

4

이 검색을 중단하는 이유입니다.

이벤트에 연결하면 해당 대리인이 사라지고 모든 대리자 메서드를 이벤트로 전달하는 특수 UISearchBarDelegate로 바뀝니다.

즉, 위임자를 동일한 컨트롤의 이벤트와 함께 사용할 수 없습니다.

한 가지 가능한 솔루션 (MonoTouch.Dialog 자체를 패치하지 않으려는 경우)은 기존 sb.Delegate를 SearchScope 메서드를 구현하고 다른 모든 것을 UISearchBarDelegate에 전달할 수있는 사용자 지정 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); 
    } 
}