2016-11-21 14 views
1

私の検索バーの[キャンセル]ボタンを非表示にしたかったのです。次のカスタムレンダラコードを実装しましたが、動作しないようです。誰かが解決策を知っている場合は、共有してください。 layoutsubviews方法でキャンセルボタンを非表示にするXamarin iOS検索バーからキャンセルボタンを非表示にする

protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> e) 
    { 
     base.OnElementChanged(e); 
     if (Control != null) 
     { 
      Control.Subviews[0].Subviews[0].RemoveFromSuperview();   
     } 
    } 

答えて

0

public class iOSSearchBar : SearchBarRenderer 
    { 
     protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> args) 
     { 
      base.OnElementChanged(args); 

     UISearchBar bar = (UISearchBar)this.Control; 

     bar.AutocapitalizationType = UITextAutocapitalizationType.None; 
     bar.AutocorrectionType = UITextAutocorrectionType.No; 
     //bar.BarStyle = UIBarStyle.Default; 
     //bar.BarTintColor = UIColor.LightGray; 
     //bar.KeyboardType = UIKeyboardType.ASCIICapable; 
     bar.SearchBarStyle = UISearchBarStyle.Minimal; 
     bar.SetShowsCancelButton(false, false); 
     bar.ShowsCancelButton = false; 
} 
} 

おかげで私は私がそれを手動で削除するには、管理だと思います。

public override void LayoutSubviews() 
      { 
       base.LayoutSubviews(); 
       UISearchBar bar = (UISearchBar)this.Control; 
       bar.ShowsCancelButton = false; 

      } 

後も、検索者をサブクラス化する必要が働いていないか、私にされています

SearchBar.TextChanged += delegate 
      { 
       SearchBar.ShowsCancelButton = false; 

      }; 
1

は、これは私のために働きました。 https://gist.github.com/xleon/9f94a8482162460ceaf9

using System; 
using Xamarin.Forms.Platform.iOS; 
using Xamarin.Forms; 
using UIKit; 
using System.Diagnostics; 

[assembly: ExportRenderer(typeof(SearchBar), typeof(Namespace.iOS.Renderers.ExtendedSearchBarRenderer))] 
namespace Namespace.iOS.Renderers 
{ 
    public class ExtendedSearchBarRenderer : SearchBarRenderer 
    { 
     protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) 
     { 
      base.OnElementPropertyChanged(sender, e); 

      if (e.PropertyName == "Text") 
      { 
       Control.ShowsCancelButton = false; 
      } 
     } 
    } 
} 
関連する問題