参考资料:
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 禁用复制粘贴功能
- 新建一个 UITextField 的分类或者是新建一个继承自UITextField的子类(避免与其他UITextField冲突)。
- 在分类或子类中重写相应的方法。
方法一 (禁用所有输入框功能按钮):
-(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;
}
网友评论