【问题标题】:Xamarin iOS searchbar customizationXamarin iOS 搜索栏自定义
【发布时间】:2019-12-16 03:41:03
【问题描述】:

我正在尝试对 iOS 的 Xamarin 搜索栏进行以下自定义;

  • 更改添加搜索文本时出现的搜索栏中的 X(关闭)图标
  • 在搜索文本和搜索图标之间添加填充

我添加了一个自定义渲染器,代码如下;

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

        Control.BackgroundColor = UIColor.White;
        UITextField txSearchField = (UITextField)Control.ValueForKey(new Foundation.NSString("searchField"));
        txSearchField.BackgroundColor = Color.FromHex("#f0f3f7").ToUIColor();
        txSearchField.BorderStyle = UITextBorderStyle.None;
        txSearchField.Layer.CornerRadius = 6f;
    }
    protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
    {
        base.OnElementPropertyChanged(sender, e);

        if (e.PropertyName == nameof(SearchBar.Text))
        {
            Control.SetShowsCancelButton(false, false);
        }
    }
}

如何扩展此代码以允许上述自定义?

【问题讨论】:

  • 您想通过哪种方式更改关闭图标?
  • 用新的图标图像来改变它

标签: xamarin.forms


【解决方案1】:

IOS UiTextField 有ClearButtonMode,先可以这样设置:

uITextfield.ClearButtonMode = UITextFieldViewMode.WhileEditing;

如果想改变cancle按钮的图片,需要使用textfield的Delegate:

uITextfield.Delegate = new TextFieldDelegate();

TextFieldDelegate.cs

public class TextFieldDelegate : UITextFieldDelegate
{
    public override bool ShouldChangeCharacters(UITextField textField, NSRange range, string replacementString)
    {
        UIButton button = (UIButton)textField.ValueForKey(new Foundation.NSString("_clearButton"));

        if (button is UIButton)
        {
            button.SetImage(new UIImage("eye.png"), UIControlState.Normal);

        }

        return true;
    }
}

效果如下:

【讨论】:

    猜你喜欢
    • 2015-11-16
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    相关资源
    最近更新 更多