如何防止将一个特定字符输入UITextView(在Xamarin中)?

时间:2015-03-13 00:12:29

标签: ios xamarin

我需要阻止用户将插入符号(" ^")输入到UITextView中实现的注释字段中。我发现了这个问题:prevent lower case in UITextView,但我不清楚调用shouldChangeTextInRange方法的时间/频率。它是否需要每次击键?它是这样命名的,因为它会被调用一次以进行粘贴吗?我没有阻止整个粘贴操作,而是去掉了有问题的插入符号,它看起来不像该方法可以做的。

我们的主要应用程序(使用VCL组件在C ++ Builder中编写)可以过滤按键,因此如果按下^,则会发出蜂鸣声并且字符不会添加到文本字段中。我想在这里复制这种行为。

有没有办法在Xamarin中做到这一点?我先做iOS,可能会在以后询问Android。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您是否正在使用Xamarin.Forms来构建UI?如果您要定位Android,我强烈建议您这样做。

如果是这种情况,那么您可以使用自定义Entry子类轻松完成此操作:

public class FilteredEntry : Entry
{
    private string FilterRegex { get; set; }

    public FilteredEntry (string filterRegex)
    {
        // if we received some regex, apply it
        if (!String.IsNullOrEmpty (filterRegex)) {

            base.TextChanged += EntryTextChanged;

            FilterRegex = filterRegex;
        }
    }

    void EntryTextChanged (object sender, TextChangedEventArgs e)
    {
        string newText = e.NewTextValue;

        (sender as Entry).Text = Regex.Replace (newText, FilterRegex, String.Empty);
    }
}

用法:

// The root page of your application
MainPage = new ContentPage {
    Content = new StackLayout {
        VerticalOptions = LayoutOptions.Center,
        Children = {
            new FilteredEntry(@"\^")
        }
    }
};

键入的^将从条目文本中删除。