开发过程中的小知识点总结(六)

开发过程中的小知识点总结(六)

1、UITextField中禁止复制粘贴

封装UITextField,重写canPerformAction方法

 -(BOOL)canPerformAction:(SEL)action withSender:(id)sender

例:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    if (action == @selector(paste:)) //禁止粘贴
        return NO;
    if (action == @selector(copy:)) // 禁止复制
        return NO;
    return [super canPerformAction:action withSender:sender];
}

整体禁用,建议

//建议整体禁用(复制、粘贴、全选等都被禁用了)
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{

    UIMenuController *menuController = [UIMenuController sharedMenuController];
    if (menuController) {
        [UIMenuController sharedMenuController].menuVisible = NO;
    }
    return NO;
}

扩展

cut: // 剪切
copy: // 拷贝
select: // 选择
selectAll: // 全选
paste: // 粘贴
delete: // 删除
_promptForReplace: // Replace...
_transliterateChinese: // 简<=>繁
_showTextStyleOptions: // B/<u>U</u>
_define: // Define
_addShortcut: // Learn...
_accessibilitySpeak: // Speak
_accessibilitySpeakLanguageSelection: // Speak...
_accessibilityPauseSpeaking: // Pause
_share: // 共享...
makeTextWritingDirectionRightToLeft: // 往右缩进
makeTextWritingDirectionLeftToRight: // 往左缩进

2、UITextField的输入限制(仅使用于英文和数字)
实现UITextFieldDelegate的代理方法,

#pragma mark - UITextFieldDelegate Methods

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{

    if (textField == self.portTextField && (textField.text.length + string.length) > 20) {
        return NO;
    }
    
    if (string.length == 0) {
        return YES;
    }

    return YES;
}

3、设置UILabel文本里某几个字为特殊颜色的效果


   NSString *string = @"扫机身二维码/扫登录二维码";
   NSMutableAttributedString *hintString = [[NSMutableAttributedString alloc] initWithString:string];
   NSRange range = [[hintString string] rangeOfString:@"机身二维码"];
  [hintString addAttribute:@{ NSFontAttributeName : [UIFont systemFontOfSize:constantFromPhone6(17) weight:UIFontWeightSemibold],
   NSForegroundColorAttributeName : [UIColor colorWithHexString:@"#2283E2"] } range:range];
   _tipsLabel.attributedText = hintString;

参考链接:https://www.jianshu.com/p/8c7dd7d8501b

4、UILabel调整行间距

-(NSAttributedString*)getAttributedStringWithLineSpace:(CGFloat)lineSpace kern:(CGFloat)kern {
       NSMutableParagraphStyle*paragraphStyle = [NSMutableParagraphStylenew];
      //调整行间距
      paragraphStyle.lineSpacing= lineSpace;
      NSDictionary*attriDict =@{NSParagraphStyleAttributeName:paragraphStyle,NSKernAttributeName:@(kern)};
      NSMutableAttributedString*attributedString = [[NSMutableAttributedStringalloc]initWithString:selfattributes:attriDict];

      returnattributedString;
}

5、校验字符串是否是IP地址

例: 写一个NSString的分类,在分类里定义校验方法

- (BOOL)isIPAddress
{
    NSString *pattern = @"((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
    BOOL isMatch = [pred evaluateWithObject:self];
    return isMatch;
}

6、对NSMutableDictionary设置键值对时setObject和setValue的区别

    
     setObject :值必须是不为空的任意类型(nonnull),若value为空,会导致NSMutableDictionary出现崩溃现象。 key值可以传入不为空的id类型。
     
     setValue方法中,值可以为空值(nullable),并且在setValue方法中,假如你传的值为空的话,那么他会调用- (void)removeObjectForKey:(id)aKey;这个方法。所以用setValue方法可以有效的防止值为空所出现的崩溃现象。 key必须是不为空的字符串(nonnull NSString)。
     
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值