2016-12-13 14 views
1

저는 iOS에 익숙하지 않습니다. MacOS에서 Xamarin Studio를 사용하고 있습니다. (이미 Xamarin.Droid 앱을 가지고 있으며 이제 iOS에서 제작하고 있습니다.)UISearchBar SearchButton을 호출하지 않았습니까?

저는 UISearchBar를 사용하는 데 어려움을 겪고 있습니다. 정말 기본적인 사용법을 원합니다.이 요리법 (https://developer.xamarin.com/recipes/ios/content_controls/search-controller/)을 따르려고했지만 여전히 작동하도록 관리 할 수 ​​없습니다.

내가 얻으려고하는 것은 사용자가 텍스트를 입력 한 다음 키보드의 "검색"버튼을 눌러야하는 SearchBar입니다. 검색 버튼을 누르면 웹 서비스에서 검색된 데이터로 UITableView를 채울 코드를 호출해야합니다.

가 여기 내 스토리 보드 구조,

TableView Properties

My ViewController

Structure

ViewController Properties

내가 다음 코드를 시도한 이름으로 jQuery과 포함의 ViewController의 모든 보인다 잘 작동하지만 w 암탉 나는 키보드에서 검색 누릅니다 SearchButtonClicked 이벤트는 트리거되지 않습니다 ... 그리고

public partial class SearchViewController : UIViewController 
    { 
     public SearchViewController(IntPtr handle) : base(handle) 
     { 
     } 

     public override void ViewDidLoad() 
     { 
      var searchController = new UISearchController(this); 

      searchController.SearchBar.SizeToFit(); 
      searchController.SearchBar.ShowsCancelButton = true; 
      searchController.SearchBar.SearchButtonClicked += delegate { 
       Console.WriteLine("Hello ????"); 
       this.Title = "This code is never called"; 
      }; 


      RunnersSearchTableView.TableHeaderView = searchController.SearchBar; 

      base.ViewDidLoad(); 
     } 
    } 

는 또한

public partial class SearchViewController : UIViewController 
    { 
     public SearchViewController(IntPtr handle) : base(handle) 
     { 
     } 

     public override void ViewDidLoad() 
     { 
      var searchController = new UISearchController(this); 

      searchController.SearchBar.SizeToFit(); 
      searchController.HidesNavigationBarDuringPresentation = true; 
      searchController.SearchBar.ShowsCancelButton = true; 
      searchController.SearchBar.Delegate = new MySearchBarDelegate(); 

      RunnersSearchTableView.TableHeaderView = searchController.SearchBar; 

      base.ViewDidLoad(); 
     } 
    } 

    public class MySearchBarDelegate : UISearchBarDelegate 
    { 
     public MySearchBarDelegate() 
     { 

     } 

     public override void SearchButtonClicked(UISearchBar searchBar) 
     { 
      Console.WriteLine("TEST"); 
      searchBar.ResignFirstResponder(); 
      base.SearchButtonClicked(searchBar); 
     } 
    } 

을 시도 또한

public partial class SearchViewController : UIViewController 
    { 
     public SearchViewController(IntPtr handle) : base(handle) 
     { 
     } 

     public override void ViewDidLoad() 
     { 
      var searchController = new UISearchController(this); 

      searchController.SearchBar.SizeToFit(); 
      searchController.HidesNavigationBarDuringPresentation = true; 
      searchController.SearchBar.ShowsCancelButton = true; 
      searchController.SearchBar.WeakDelegate = this; 

      RunnersSearchTableView.TableHeaderView = searchController.SearchBar; 


      base.ViewDidLoad(); 
     } 

     [Export("searchBarSearchButtonClicked:")] 
     public virtual void SearchButtonClicked(UISearchBar searchBar) 
     { 
      Console.WriteLine("hello??"); 
      searchBar.ResignFirstResponder(); 
     } 
    } 

을 시도 이유를 알아낼 수 없습니다 아무도 작동하지 않는 것 같습니다

답변

1

좋아, 난 당신이 UISearchBar를 사용해야 할 때 내가 오해 때문이었다 생각합니다. 나는 사용자를위한 입력으로 그냥 사용하고 싶었지만 SearchBar가 UITableView와 함께 사용되어 검색하는 것으로 보인다 -> 그건 내 경우가 아니다.

1

검색 창에 대리인을 등록해야합니다. 이상

[Foundation.Register("UISearchBar", true)] 

: https://developer.xamarin.com/api/type/UIKit.UISearchBar/

+1

답변 해 주셔서 감사합니다. 대의원을 어디에서 등록해야합니까? 내 UIViewController 클래스에? 그것은 중복 등록 속성이 작동하지 않습니다. WeakDelegate = this를 내 SearchBar에 넣은 다음 SearchButtonClicked를 내보내려고했습니다. https://github.com/xamarin/ios-samples/blob/master/ios8/TableSearch/TableSearch/MainTableViewController.cs하지만 그렇지 않습니다. 다음 중 하나를 수행하십시오. / –