2016-12-13 14 views
1

Я новичок в iOS, и я использую Xamarin Studio на MacOS (у меня уже есть приложение Xamarin.Droid и теперь это делается на iOS).UISearchBar SearchButtonClicked никогда не вызывал?

Я борюсь с использованием UISearchBar, я хочу действительно базовое использование tho .. Я пытался следовать этим рецептам (https://developer.xamarin.com/recipes/ios/content_controls/search-controller/), но все равно не могу заставить его работать.

То, что я пытаюсь получить, - это SearchBar, в котором пользователь должен набрать текст, а затем нажать кнопку «Поиск» на клавиатуре. Нажатие кнопки поиска вызовет код, который будет заполнять UITableView данными, полученными на моем веб-сервисе.

Вот мой Раскадровка структуру, ViewController которая содержит UITableView с именем

My ViewController

Structure

ViewController Properties

TableView Properties

Я попытался следующий код, все, кажется, работать нормально, но 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 HAS должен использоваться с UITableView для поиска в -> Это не мой случай.

1

Вам необходимо зарегистрировать делегата для поиска.

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

больше: https://developer.xamarin.com/api/type/UIKit.UISearchBar/

+1

Благодарим за отзыв. Где я должен зарегистрировать делегат? В моем классе UIViewController? Это не работает. У меня есть дубликат атрибута Register. Я попытался установить WeakDelegate = this на моем SearchBar, а затем экспортировать SearchButtonClicked, например: https://github.com/xamarin/ios-samples/blob/master/ios8/TableSearch/TableSearch/MainTableViewController.cs, но он не работайте: / –