我是 iOS 的新手,我在 MacOS 上使用 Xamarin Studio(我已经有了我的 Xamarin.Droid 应用,现在正在 iOS 上制作)。
我正在努力使用 UISearchBar,但我想要一个真正的基本用法 .. 我试着按照这个食谱 (https://developer.xamarin.com/recipes/ios/content_controls/search-controller/) 但仍然无法让它工作。
我想要得到的是一个 SearchBar,用户应该在其中键入文本,然后按键盘上的“搜索”按钮。按下搜索按钮应调用代码,该代码将使用在我的网络服务上检索到的数据填充 UITableView。
这是我的 Storyboard结构,一个 ViewController,其中包含一个带有名称的 UITableView
我尝试了下面的代码,一切似乎都正常,但是当我在键盘上按下搜索时,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/