我需要阻止用户将插入符号(" ^")输入到UITextView
中实现的注释字段中。我发现了这个问题:prevent lower case in UITextView,但我不清楚调用shouldChangeTextInRange
方法的时间/频率。它是否需要每次击键?它是这样命名的,因为它会被调用一次以进行粘贴吗?我没有阻止整个粘贴操作,而是去掉了有问题的插入符号,它看起来不像该方法可以做的。
我们的主要应用程序(使用VCL组件在C ++ Builder中编写)可以过滤按键,因此如果按下^,则会发出蜂鸣声并且字符不会添加到文本字段中。我想在这里复制这种行为。
有没有办法在Xamarin中做到这一点?我先做iOS,可能会在以后询问Android。
感谢您的帮助!
答案 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(@"\^")
}
}
};
键入的^
将从条目文本中删除。