美文网首页
UITextfield光标选择操作

UITextfield光标选择操作

作者: 独孤流 | 来源:发表于2018-10-19 17:02 被阅读34次

参考资料:
UITextField 光标的位置设置获取

一、UITextField 光标的位置设置获取

通过给UITextField 加一个拓展

//#import "UITextField+ExtentRange.h"
#import <UIKit/UIKit.h>
 
@interface UITextField (ExtentRange)
 
- (NSRange) selectedRange;
- (void) setSelectedRange:(NSRange) range;
 
@end
// #import "UITextField+ExtentRange.m"

#import "UITextField+ExtentRange.h"
 
@implementation UITextField (ExtentRange)
 
- (NSRange) selectedRange
{
    UITextPosition* beginning = self.beginningOfDocument;
    
    UITextRange* selectedRange = self.selectedTextRange;
    UITextPosition* selectionStart = selectedRange.start;
    UITextPosition* selectionEnd = selectedRange.end;
    
    const NSInteger location = [self offsetFromPosition:beginning toPosition:selectionStart];
    const NSInteger length = [self offsetFromPosition:selectionStart toPosition:selectionEnd];
    
    return NSMakeRange(location, length);
}
 
- (void) setSelectedRange:(NSRange) range  // 备注:UITextField必须为第一响应者才有效
{
    UITextPosition* beginning = self.beginningOfDocument;
    
    UITextPosition* startPosition = [self positionFromPosition:beginning offset:range.location];
    UITextPosition* endPosition = [self positionFromPosition:beginning offset:range.location + range.length];
    UITextRange* selectionRange = [self textRangeFromPosition:startPosition toPosition:endPosition];
    
    [self setSelectedTextRange:selectionRange];
}
 
@end

二、UITextField 禁用复制粘贴功能

参考资料:UITextField 禁用复制粘贴功能

  1. 新建一个 UITextField 的分类或者是新建一个继承自UITextField的子类(避免与其他UITextField冲突)。
  2. 在分类或子类中重写相应的方法。

方法一 (禁用所有输入框功能按钮):


-(BOOL)canPerformAction:(SEL)action withSender:(id)sender {
        UIMenuController *menuController = [UIMenuController sharedMenuController];
        if (menuController) {
            [UIMenuController sharedMenuController].menuVisible = NO;
        }
    return NO;
}

方法二 (可选择禁用部分功能):

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
    {
        // 禁用粘贴功能
        if (action == @selector(paste:))
            return NO;
 
        // 禁用选择功能
        if (action == @selector(select:))   
            return NO;   
 
        // 禁用全选功能
        if (action == @selector(selectAll:))   
            return NO;
 
        return [super canPerformAction:action withSender:sender];
    }

方法三,在textfield的UITextFieldDelegate里处理,可以通过条件判断更灵活

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (需要禁用的条件) {
        return NO;
    }
    return YES;
}

相关文章

网友评论

      本文标题:UITextfield光标选择操作

      本文链接:https://www.haomeiwen.com/subject/eckuzftx.html