textfield截取字符串
ios7 会崩溃
解:
之前的写法是这样的
正确的写法:
 

先判断markedTextRange是否为nil,   markedTextRange这个属性是啥意思呢

表示文件中当前选中的文本的长度,参考下面一片文章,详细讲解了这个属性的意思:
在解决上述问题的时候你需要判断markedTextRange是不是为Nil,如果为Nil的话就说明你现在没有未选中的字符,可以计算文字长度。否则此时计算出来的字符长度可能不正确
如果选中的长度为nil,即没有选中的长度,那么就正常计算字符串长度,如果超长就截取字符串
如果选中的长度不为nil,就是有选中的,那不用截取字符串,让他正常输入,超出了,真正往textFild填充的时候,, 选中的字符串的长度为nil了,这样就会走if判断,切割字符串
 

 
还写了下面的方法:
 

这个方法的作用是判断,是否需要修改text in range ,是否需要修改某一段文字, 如果不实现这个代理方法,在中文输入法下面,文字长度超出后,点击键盘,还是会联想字符串
里面的判断表示,如果没有选中的文本, 文本的总长度如果超出了限制,就不让它修改 return no
如果没有选中的文本,文本长度没有超出限制,可以修改 return yes
如果有选中的文本,让他修改 return yes

完整代码:
//
// HDFWorkTableAddCheckItemView.h
// newDoctor
//
// Created by songximing on 16/8/20.
// Copyright © 2016年 haodf.com. All rights reserved.
// #import <UIKit/UIKit.h> /**
* @author songximing, 16-08-20 16:08:31 22:12 -2
*
* 请输入检查项目View
*/
@interface HDFBenchAddCheckItemView : UIView
- (void)show;
@property (nonatomic, copy) HDFStringBlock saveStringBlock; //<!确定按钮保存的字符串 /**
* @author songximing, 16-08-20 21:08:01
*
* 请输入检查项目View 的初始化方法
*
* @param frame 必须给frame(跟屏幕相等)
* @param content 带入的文案内容 第一次进入没有传 nil
* @param title 标题 "请输入检查项目" 或者 "请输入检验项目" 两个必须填写一个
* @param placeHolder 站位文字 必须传
*
* @return self
*/
- (instancetype)initWithFrame:(CGRect)frame content:(NSString *)content title:(NSString *)title placeHolder:(NSString *)placeHolder;
@property (nonatomic, copy) NSString *cancelString; //!<清空
@end
//
// HDFWorkTableAddCheckItemView.m
// newDoctor
//
// Created by songximing on 16/8/20.
// Copyright © 2016年 haodf.com. All rights reserved.
// #import "HDFBenchAddCheckItemView.h"
#import "NSString+HDFAdditions.h" #define kDescriptionMAXLength 50 //最多50字
#define kTextViewStringWidth kScreenWidth - 50 - 30 // 50是白色View的左右间距 30是textView距离白色view的左右间距
#define kBenchBottomViewHeight 45.0f @interface HDFBenchAddCheckItemView ()<UITextViewDelegate>
@property (nonatomic, strong) UITextView *textView;
@property (nonatomic, strong) UIView *whiteContainerView;
@property (nonatomic, strong) UIButton *cancelButton;
@property (nonatomic, strong) UIControl *bgCoverControl;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *content; //!<带入的文本内容
@property (nonatomic, copy) NSString *placeHolder; //!<textView站位文字
@end @implementation HDFBenchAddCheckItemView - (void)dealloc {
LOG(@"请输入检查项目View释放了...");
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
} - (instancetype)initWithFrame:(CGRect)frame content:(NSString *)content title:(NSString *)title placeHolder:(NSString *)placeHolder{
if (self = [super initWithFrame:frame]) {
self.title = title;
self.content = content;
self.placeHolder = placeHolder;
[self configUI];
}
return self;
} #pragma mark - UI
- (void)configUI {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; // 灰色遮罩
UIControl *bgCoverControl = [UIControl hdf_viewWithSuperView:self constraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo();
} tap:^(UIGestureRecognizer *sender) {
// [self dismiss];
}];
bgCoverControl.backgroundColor = [UIColor colorWithRed: green: blue: alpha:];
self.bgCoverControl = bgCoverControl; // 白色背景
UIView *whiteContainerView = [UIView hdf_viewWithSuperView:self constraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo();
make.centerX.mas_equalTo();
make.width.mas_equalTo();
}];
whiteContainerView.backgroundColor = kWColor;
whiteContainerView.alpha = ;
whiteContainerView.layer.cornerRadius = ;
whiteContainerView.clipsToBounds = YES;
self.whiteContainerView = whiteContainerView; // title
UILabel *titleLabel = [UILabel hdf_labelWithText:@"请输入检查项目" font:kFontWithSize() superView:whiteContainerView constraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo();
make.centerX.mas_equalTo();
}];
titleLabel.textAlignment = NSTextAlignmentCenter;
if (self.title.length > ) { // 设置标题
titleLabel.text = self.title;
} // 文本输入框
self.textView = [UITextView hdf_textViewWithPlaceholder:@" " delegate:self superView:whiteContainerView constraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(titleLabel.mas_bottom).offset();
make.left.mas_equalTo();
make.right.mas_equalTo(-);
make.height.mas_equalTo(kFontWithSize().lineHeight * );
}];
self.textView.layer.cornerRadius = ;
self.textView.clipsToBounds = YES;
self.textView.layer.borderWidth = 0.5;
self.textView.layer.borderColor = kColorWith16RGB(0xcccccc).CGColor;
self.textView.hdf_placeholder = @"请输入检查项目"; self.textView.backgroundColor = kColorWith16RGB(0xf8f8f8);
self.textView.font = kFontWithSize();
self.textView.hdf_placeholderFont = kFontWithSize();
self.textView.hdf_placeholderLabel.numberOfLines = ;
self.textView.hdf_placeholderColor = [UIColor redColor];
[self.textView.hdf_placeholderLabel mas_updateConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.textView).offset(7.5);
make.left.mas_equalTo(self.textView).offset();
make.width.mas_equalTo(self.textView.mas_width).offset(-); // 让站位文字换行
}]; if (self.content.length > ) { // 带入的文本内容
self.textView.text = self.content;
self.textView.hdf_placeholder = self.placeHolder;
self.textView.hdf_placeholderLabel.hidden = YES;
}else { // 无内容,展示站位文字
self.textView.hdf_placeholder = self.placeHolder;
self.textView.hdf_placeholderLabel.hidden = NO;
} // // textView高度自适应内容
// CGSize textSize = CGSizeZero;
// if (isIOS(7.0)) {
// textSize = [self.textView sizeThatFits:CGSizeMake(kTextViewStringWidth, MAXFLOAT)];
// }
// else{
// textSize = self.textView.contentSize;
// }
// if (kTextViewHeight < textSize.height) {
// [self.textView mas_updateConstraints:^(MASConstraintMaker *make) {
// make.height.mas_equalTo(textSize.height);
// }];
// }else {
// [self.textView mas_updateConstraints:^(MASConstraintMaker *make) {
// make.height.mas_equalTo(kTextViewHeight);
// }];
// } [self createBottomView];
} - (void)createBottomView {
UIView *bottomBgView = [[UIView alloc]init];
[self.whiteContainerView addSubview:bottomBgView];
[bottomBgView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.textView.mas_bottom).offset();
make.left.right.equalTo(self.whiteContainerView);
make.height.mas_equalTo(kBenchBottomViewHeight);
}]; // 水平分割线
UIView *horizontalLineView = [[UIView alloc]init];
[bottomBgView addSubview:horizontalLineView];
horizontalLineView.backgroundColor = kG5Color;
[horizontalLineView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(bottomBgView);
make.left.right.equalTo(bottomBgView);
make.height.mas_equalTo(kLineHeight);
}]; // 垂直分割线
UIView *verticalLineView = [[UIView alloc]init];
[bottomBgView addSubview:verticalLineView];
verticalLineView.backgroundColor = kG5Color;
[verticalLineView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.bottom.equalTo(bottomBgView);
make.centerX.equalTo(bottomBgView);
make.width.mas_equalTo(kLineHeight);
}]; kWeakObject(self)
// 取消 按钮
UIButton *cancelButton = [UIButton hdf_buttonWithTitle:@"取消" superView:bottomBgView constraints:^(MASConstraintMaker *make) {
make.top.equalTo(horizontalLineView.mas_bottom);
make.left.bottom.equalTo(bottomBgView);
make.right.equalTo(verticalLineView.mas_left);
} touchup:^(UIButton *sender) {
[weakObject cancelButtonClick];
}];
[cancelButton setTitleColor:kNavColer forState:UIControlStateNormal];
self.cancelButton = cancelButton; UIButton *confirmButton = [UIButton hdf_buttonWithTitle:@"确定" superView:bottomBgView constraints:^(MASConstraintMaker *make) {
make.top.equalTo(horizontalLineView.mas_bottom);
make.right.bottom.equalTo(bottomBgView);
make.left.equalTo(verticalLineView.mas_right);
} touchup:^(UIButton *sender) {
[weakObject confirmButtonClick];
}];
[confirmButton setTitleColor:kNavColer forState:UIControlStateNormal]; [self.whiteContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(bottomBgView);
}];
} #pragma mark - 点击事件
- (void)confirmButtonClick {
// 去掉首尾的空格
self.textView.text = [self.textView.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; // if (self.textView.text.length < 1) {
// [HDFHud showTip:@"请先输入检查项目"];
// return;
// }
[self dismiss];
if (self.saveStringBlock) {
self.saveStringBlock(self.textView.text);
}
} - (void)cancelButtonClick {
// self.textView.text = nil; // 点击取消,清空输入的文字
[self dismiss];
// if (self.saveStringBlock) {
// self.saveStringBlock(self.textView.text);
// }
} #pragma UITextViewDelegate
-(void)textViewDidChange:(UITextView *)textView {
if (self.textView.text.length == ) {
self.textView.hdf_placeholderLabel.hidden = NO;
}else {
self.textView.hdf_placeholderLabel.hidden = YES;
}
// 限制50个字数
if (textView.markedTextRange == nil) {
if (self.textView.text.length > kDescriptionMAXLength) {
// [HDFHud showTip:@"简介最多输入50个字"];
self.textView.text = [self.textView.text substringToIndex: kDescriptionMAXLength]; // MAXLENGTH为最大字数
}
} // // textView高度自适应内容
// CGSize textSize = CGSizeZero;
// if (isIOS(7.0)) {
// textSize = [self.textView sizeThatFits:CGSizeMake(kTextViewStringWidth, MAXFLOAT)];
// }
// else{
// textSize = self.textView.contentSize;
// }
//
// if (kTextViewHeight < textSize.height) {
// [self.textView mas_updateConstraints:^(MASConstraintMaker *make) {
// make.height.mas_equalTo(textSize.height);
// }];
// [UIView animateWithDuration:0.25 animations:^{
// [self layoutIfNeeded];
// }];
// }else {
// [self.textView mas_updateConstraints:^(MASConstraintMaker *make) {
// make.height.mas_equalTo(kTextViewHeight);
// }];
// }
} - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
if (textView.markedTextRange == nil) {
if (range.location >= kDescriptionMAXLength) {
return NO;
}
}
return YES;
} #pragma mark - 键盘相关
// Handle keyboard show/hide changes
- (void)keyboardWillShow: (NSNotification *)notification { CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; UIInterfaceOrientation interfaceOrientation = [[UIApplication sharedApplication] statusBarOrientation];
if (UIInterfaceOrientationIsLandscape(interfaceOrientation) && NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_7_1) {
CGFloat tmp = keyboardSize.height;
keyboardSize.height = keyboardSize.width;
keyboardSize.width = tmp;
} [self.whiteContainerView mas_updateConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(-keyboardSize.height * 0.5);
}];
[UIView animateWithDuration:0.2f delay:0.0 options:UIViewAnimationOptionTransitionNone
animations:^{
[self layoutIfNeeded];
}
completion:nil
];
} - (void)keyboardWillHide: (NSNotification *)notification {
[self.whiteContainerView mas_updateConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo();
}];
[UIView animateWithDuration:0.2f delay:0.0 options:UIViewAnimationOptionTransitionNone
animations:^{
[self layoutIfNeeded];
}
completion:nil
];
} - (void)show {
[[UIApplication sharedApplication].keyWindow addSubview:self];
//动画
CGAffineTransform transform = CGAffineTransformMakeScale(1.2, 1.2);
self.whiteContainerView.transform = transform; [UIView animateWithDuration:0.2 animations:^{
self.bgCoverControl.backgroundColor = [UIColor colorWithRed: green: blue: alpha:0.5];
self.whiteContainerView.alpha = ; // 子控件的透明度跟着变化
CGAffineTransform transform = CGAffineTransformMakeScale(, );
self.whiteContainerView.transform = transform;
}];
} - (void)dismiss {
[UIView animateWithDuration:0.2 animations:^{
self.bgCoverControl.backgroundColor = [UIColor colorWithRed: green: blue: alpha:];
self.whiteContainerView.alpha = ;
} completion:^(BOOL finished) {
[self removeFromSuperview];
}];
} -(void)setCancelString:(NSString *)cancelString {
_cancelString = cancelString;
[self.cancelButton setTitle:cancelString forState:UIControlStateNormal];
} //****以下为解决第一次进入页面,textview不可滚动问题
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
NSString * strText = self.textView.text;
CGFloat h = [strText heightWithFont:[UIFont systemFontOfSize:] withLineWidth:kTextViewStringWidth];
self.textView.contentSize = CGSizeMake(, h+); return [super hitTest:point withEvent:event];
} @end

textView截取字符串-医生工作台1期的更多相关文章

  1. ThinkPHP 模板substr的截取字符串函数

    ThinkPHP 模板substr的截取字符串函数在Common/function.php加上以下代码 /** ** 截取中文字符串 **/ function msubstr($str, $start ...

  2. shell编程常用的截取字符串操作

    1.          常用的字符串操作 1.1.           替换字符串:$ echo ${var/ /_}#支持正怎表达式 / /表示搜索到第一个替换,// /表示搜索到的结果全部替换. ...

  3. [No0000A4]DOS命令(cmd)批处理:替换字符串、截取字符串、扩充字符串、获取字符串长度

    1.替换字符串,即将某一字符串中的特定字符或字符串替换为给定的字符串.举例说明其功能:========================================= @echo off set a ...

  4. js中substr,substring,slice。截取字符串的区别

    substr(n1,n2) n1:起始位置(可以为负数) n2:截取长度(不可以为0,不可以为负数,可以为空) 当n1为正数时,从字符串的n1下标处截取字符串(起始位置),长度为n2. 当n1为负数时 ...

  5. Linux Shell 截取字符串

    Linux Shell 截取字符串 shell中截取字符串的方法很多 ${var#*/} ${var##*/} ${var%/*} ${var%%/*} ${var:start:len} ${var: ...

  6. SQL Server中截取字符串常用函数

    SQL Server 中截取字符串常用的函数: .LEFT ( character_expression , integer_expression ) 函数说明:LEFT ( '源字符串' , '要截 ...

  7. inux中shell截取字符串方法总结

    shell中截取字符串的方法有很多中, ${expression}一共有9种使用方法. ${parameter:-word} ${parameter:=word} ${parameter:?word} ...

  8. Excel怎样从一串字符中的某个指定“字符”前后截取字符及截取字符串常用函数

    怎么样可以从一串字符中的某个指定位置的前或后截取指定个数的字符. 如:12345.6789,我要截取小数点前(或后)的3个字符.怎么样操作, 另外,怎么样从右边截取字符,就是和left()函数相反的那 ...

  9. SQL注入截取字符串函数

    在sql注入中,往往会用到截取字符串的问题,例如不回显的情况下进行的注入,也成为盲注,这种情况下往往需要一个一个字符的去猜解,过程中需要用到截取字符串.本文中主要列举三个函数和该函数注入过程中的一些用 ...

随机推荐

  1. Java Hour 20 Spring

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 本文作者Java 现经验约为20 Hour,请各位不吝赐教. 今天心情不佳,只 ...

  2. hive笔记(自学整理的)

    第一部分:用户管理 创建用户:CREATE DATABASE XXX 查看用户:SHOW DATABASES; 关键查看用户:show databases like 'de.*'   讲解:创建一个用 ...

  3. Twitter search API

    Twitter crawler 与sina 微博类似,使用twitter api之前,首先要有twitter的账号,在twitter developer中创建应用(https://apps.twitt ...

  4. 浅析 Java Thread.join()

    转自:http://blog.csdn.net/bzwm/article/details/3881392 一.在研究join的用法之前,先明确两件事情. 1.join方法定义在Thread类中,则调用 ...

  5. 【Android】SlidingMenu属性详解(转)

    原文:http://my.eoe.cn/1169143/archive/21892.html SlidingMenu简介:SlidingMenu的是一种比较新的设置界面或配置界面效果,在主界面左滑或者 ...

  6. python 添加类属性

    类属性必须赋值. 创建类属性 类是模板,而实例则是根据类创建的对象. 绑定在一个实例上的属性不会影响其他实例,但是,类本身也是一个对象,如果在类上绑定一个属性,则所有实例都可以访问类的属性,并且,所有 ...

  7. Codeforces 86C Genetic engineering(AC自动机+DP)

    题目大概是给几个DNA片段,求构造一个长度n的字符串的方案数,要求这个字符串每个位置的字符都属于某个包含于此字符串的DNA片段. 把那些DNA片段建一个AC自动机.考虑状态的表示: dp[len][x ...

  8. LightOJ1119 Pimp My Ride(状压DP)

    dp[S]表示已经完成的工作集合 枚举从哪儿转移过来的,再通过枚举计算花费..水水的.. #include<cstdio> #include<cstring> #include ...

  9. Strong TLS configuration on servers

    - Use certificates with at least sha-256 hash algorithms (including intermediate certificates).- Use ...

  10. centos 下如何加入sudo 用户

    当在终端执行sudo命令时,系统提示“ jackluo is not in the sudoers file”: $ sudo ls Password:jackluo is not in the su ...