2016-12-13 18 views
1

私はiOSが新しく、私はMacOS上でXamarin Studioを使用しています(私は既にXamarin.Droidアプリを持っていて、今はiOS上で作っています)。UISearchBar SearchButtonは呼び出されませんでしたか?

私はUISearchBarを使って苦労しています。私は本当に基本的な使い方をしたいと思います。私はこのレシピ(https://developer.xamarin.com/recipes/ios/content_controls/search-controller/)に従うようにしましたが、まだそれを動作させることはできません。

私が得ようとしているのは、ユーザーがテキストを入力してからキーボードの「検索」ボタンを押す検索バーです。検索ボタンを押すと、Webサービス上で取得されたデータがUITableViewに読み込まれます。

はここに私のストーリーボード構造、

TableView Properties

My ViewController

Structure

ViewController Properties

は、私は次のコードを試してみました名前でのUITableViewが含まれているの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

[OK]を私はあなたがUISearchBarを使用する必要があるとき、私は誤解ので、それがあったと思います。私はちょうどユーザーの入力としてそれを使用したいと思ったが、SearchBar HASは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次のいずれかを行います:/ –

関連する問題