iOS 关于 UITextField 的字数限制
有很多的使用场景需要限制用户的输入字数,比如聊天,回帖,发朋友圈之类的。
经研究找到了比较全面稳定的实现方案。
首先监听需要限制字数的 UITextField,下面两种方法都可以
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(textFieldDidChange:)
name:@"UITextFieldTextDidChangeNotification"
object:myTextField];
[self addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
然后实现方法
// 限制输入字数为kBeiZhuMaxLength个字的监听方法
- (void)textFieldDidChange:(UITextField *)textField
{
if (textField == self.beiZhuTfd) {
NSString *toBeString = textField.text;
//获取高亮部分
UITextRange *selectedRange = [textField markedTextRange];
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position || !selectedRange)
{
if (toBeString.length > kBeiZhuMaxLength)
{
// 处理Emoji被截断的情况,rangeOfComposedCharacterSequenceAtIndex截取的最小单位是子串而不是unichar
NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:kBeiZhuMaxLength];
if (rangeIndex.length == 1)
{
textField.text = [toBeString substringToIndex:kBeiZhuMaxLength];
}
else
{
NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, kBeiZhuMaxLength)];
textField.text = [toBeString substringWithRange:rangeRange];
}
}
}
}
}
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 风屋
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果