c# - UISearchBar SearchButtonClicked 从未调用过?

标签 c# ios xamarin.ios mono xamarin-studio

我是 iOS 的新手,我在 MacOS 上使用 Xamarin Studio(我已经有了我的 Xamarin.Droid 应用,现在正在 iOS 上制作)。

我正在努力使用 UISearchBar,但我想要一个真正的基本用法 .. 我试着按照这个食谱 (https://developer.xamarin.com/recipes/ios/content_controls/search-controller/) 但仍然无法让它工作。

我想要得到的是一个 SearchBar,用户应该在其中键入文本,然后按键盘上的“搜索”按钮。按下搜索按钮应调用代码,该代码将使用在我的网络服务上检索到的数据填充 UITableView。

这是我的 Storyboard结构,一个 ViewController,其中包含一个带有名称的 UITableView

My ViewController

Structure

ViewController Properties

TableView Properties

我尝试了下面的代码,一切似乎都正常,但是当我在键盘上按下搜索时,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();
        }
    }

它们似乎都不起作用

最佳答案

您需要为搜索栏注册委托(delegate)。

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

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

关于c# - UISearchBar SearchButtonClicked 从未调用过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41116528/

相关文章:

c# - 无效的对象名称 'DB'

c# - 如何将谓词与 Included 属性一起包含?

c# - "Could not translate expression "尝试使用带有自定义 SP 的 LINQ to SQL 类插入时出错

c# - Xamarin.iOS:MPMusicPlayerController.NowPlayingItem 属性消失

c# - Entity Framework 、存储过程和导航属性

ios - 3D touch quick actions preview view controller 只有一次

ios - 使用 drawRect 绘制两个图形并为其设置动画。背景图和前景图

iphone - 显示 View 时更改 UITableView 中静态单元格的属性

c# - 使用 Xamarin Forms 播放视频

iphone - 进入移动开发的建议——纯 iPhone SDK、Android SDK、Mono Touch 还是 Titanium?