C# 如何制作;取消“;在iOS上,当键盘未聚焦时可单击搜索栏?[沙马林表格]

C# 如何制作;取消“;在iOS上,当键盘未聚焦时可单击搜索栏?[沙马林表格],c#,xamarin,xamarin.forms,xamarin.ios,C#,Xamarin,Xamarin.forms,Xamarin.ios,我目前正在尝试调整Xamarin.Forms iOS搜索栏,以便在向搜索栏添加文本时显示“取消”按钮(不是通过键盘,而是通过类别单击)。我用下面的代码成功地做到了这一点。现在的问题是,我希望“取消”按钮一出现就可以点击 目前我正在做以下工作: 单击我的命令更改搜索栏的文本->工作 取消按钮显示->工作 取消按钮可单击->不工作。它是灰色的。我需要点击搜索栏(这样键盘就会显示出来),让它变成蓝色并可点击 这是我的代码: [程序集:ExportRenderer(typeof(CustomSearch

我目前正在尝试调整Xamarin.Forms iOS
搜索栏
,以便在向搜索栏添加文本时显示“取消”按钮(不是通过键盘,而是通过类别单击)。我用下面的代码成功地做到了这一点。现在的问题是,我希望“取消”按钮一出现就可以点击

目前我正在做以下工作:

单击我的命令更改搜索栏的文本->工作

取消按钮显示->工作

取消按钮可单击->不工作。它是灰色的。我需要点击搜索栏(这样键盘就会显示出来),让它变成蓝色并可点击

这是我的代码:

[程序集:ExportRenderer(typeof(CustomSearchBar)、typeof(SearchBar_iOS))]
命名空间Project.iOS.Renderers
{
公共类SearchBar\u iOS:searchderer
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
var element=e.NewElement作为CustomSearchBar;
if(Control!=null&&element!=null)
{
this.Control.TextChanged+=(s,ea)=>
{
//如果(ea.SearchText==“”)
this.Control.ShowsCancelButton=true;
};
this.Control.OnEditingStarted+=(s,ea)=>//当控件接收焦点时
{
this.Control.ShowsCancelButton=true;
};
this.Control.OnEditingStopped+=(s,ea)=>//当控件失去焦点时
{
this.Control.ShowsCancelButton=false;
};
Control.BackgroundColor=Color.Transparent.ToUIColor();
Control.Layer.CornerRadius=10;
Control.clipstobunds=true;
Control.SearchBarStyle=UISearchBarStyle.Minimal;
}
}

“我的渲染器”中是否有一个调用,可以在添加文本时强制其可单击?

这里已经讨论了iOS native:

但是,iOS似乎不希望您干扰“取消”按钮的行为,否则他们会将其公开。也就是说,请在自定义呈现程序中为OneDitingsStopped事件尝试此操作(我端的快速测试有效):

有被苹果拒绝或其他未被发现的问题的风险,所以如果它不起作用,请不要对我大喊大叫。:-)


此外,由于“取消”按钮未通过ValueForKey方法公开访问,苹果可以随时更改密钥名称,这将打破这一老套的解决方法。

效果良好。谢谢!对Apple take很感兴趣,如果他们拒绝此操作,可能需要定制解决方案。
 this.Control.OnEditingStopped += async (s, ea) => //when control looses focus 
 {
      this.Control.ShowsCancelButton = false;
      var searchBar = this.Control;
      BeginInvokeOnMainThread(() =>
      {
          var cancelButton = searchBar.ValueForKey(new NSString("cancelButton")) as UIButton;
          cancelButton.Enabled = true;
       });
  };