限制字母、数字、符号等其他非中文字符的长度大家应该都知道咋整,但如果是中文输入法,这就比较蛋疼了。举个例子,限制长度为5,输入“我爱写代码”,当已经输入“我爱写”两字,然后输入“代码”时就会出现输入后面几位汉字被字母占用位置而输入不进去。解决办法:

- (void)textViewDidChange:(UITextView *)textView
{
    NSString *toBeString = textView.text;
    // 获取输入法
    NSString *lang = textView.textInputMode.primaryLanguage;
    // 如果输入法为中文
    if ([lang isEqualToString:@"zh-Hans"]) {
        // 这个range就是指输入的拼音还没有转化成中文时的range
        // 如果没有,就表示已经转成中文了
        UITextRange *selectedRange = [textView markedTextRange];
        if (!selectedRange && toBeString.length > 5) {
            textView.text = [toBeString substringToIndex:5];
        }
    } else if (toBeString.length > 5) {
        textView.text = [toBeString substringToIndex:5];
    }
}
复制代码

#NSDate转NSString 日期转成字符串。

+(NSString *)stringFromDate:(NSDate *)date
{
//    //获取系统当前时间
//    NSDate *currentDate = [NSDate date];
    //用于格式化NSDate对象
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    //设置格式:zzz表示时区
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss zzz"];
    //NSDate转NSString
    NSString *currentDateString = [dateFormatter stringFromDate:date];
    //输出currentDateString
    NSLog(@"%@",currentDateString);
}
复制代码

NSDate对象包含两个部分,日期(Date)和时间(Time)。格式化的时间字符串主要也是针对日期和时间。NSDateFormatter是一个很常用的类,用于格式化NSDate对象,支持本地化的信息。 NSDateFormatter常用格式有:

yyyy-MM-dd HH:mm:ss.sss
yyyy-MM-dd HH:mm:ss
yyyy-MM-dd
MM dd yyy
复制代码

NSDateFormatter格式化参数如下:

G:公元时代,例如AD公元
yy:年的后2位
yyyy:完整年
MM:月,显示为1-12
MMM:月,显示为英文月份简写,如 Jan
MMMM:月,显示为英文月份全称,如 Janualy
dd:日,2位数表示,如02
d:日,1-2位显示,如 2、11
EEE:简写星期几,如Sun
EEEE:全蝎星期几,如Sunday
aa:上下午,AM/PM
H:时,24小时制,0-23
K:时,12小时制,0-11
m:分,1-2位
mm:分,2位
s:秒,1-2位
ss:秒,2位
S:毫秒
复制代码

#NSString转NSDate 字符串转日期

+ (NSDate *)dateFromString:(NSString *)string
{
    //设置转换格式  
    NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    //NSString转NSDate
    NSDate *date = [formatter dateFromString:dateString];
    return date;
}
复制代码

参考网站:http://www.superqq.com/blog/2015/06/26/nsdatehe-nsstringxiang-hu-zhuan-huan/ 日历和时间的计算可参考:http://www.jianshu.com/p/692bb0a7269c

#iOS 监听键盘的显示与隐藏,并实现输入框紧紧跟随在键盘的上方

// 在-viewDidLoad方法中注册通知,监听键盘的弹出和收回
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillShow:)
                                             name:UIKeyboardWillShowNotification
                                           object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillHide:)
                                             name:UIKeyboardWillHideNotification 
                                           object:nil];
复制代码

###pragma mark 键盘显示的监听方法

-(void) keyboardWillShow:(NSNotification *) note
{
    // 获取键盘的位置和大小
CGRect keyboardBounds;
    [[note.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue: &keyboardBounds];
    NSNumber *duration = [note.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
    NSNumber *curve = [note.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey];

    // Need to translate the bounds to account for rotation.
    keyboardBounds = [self.view convertRect:keyboardBounds toView:nil];

    // 获取输入框的位置和大小
CGRect containerFrame = _inputView.frame;
    // 计算出输入框的y坐标
    containerFrame.origin.y = self.view.bounds.size.height - (keyboardBounds.size.height + containerFrame.size.height);
    
    // 动画改变位置
    [UIView animateWithDuration:[duration doubleValue] animations:^{
        [UIView setAnimationBeginsFromCurrentState:YES];
        [UIView setAnimationDuration:[duration doubleValue]];
        [UIView setAnimationCurve:[curve intValue]];
        // 更改输入框的位置
        _inputView.frame = containerFrame;
    }];
}
复制代码

###pragma mark 键盘隐藏的监听方法

-(void) keyboardWillHide:(NSNotification *) note
{
    NSNumber *duration = [note.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
    NSNumber *curve = [note.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey];
 
    // 获取输入框的位置和大小
CGRect containerFrame = _inputView.frame;
    containerFrame.origin.y = self.view.bounds.size.height - containerFrame.size.height;
    
    // 动画改变位置
    [UIView animateWithDuration:[duration doubleValue] animations:^{
        [UIView setAnimationBeginsFromCurrentState:YES];
        [UIView setAnimationDuration:[duration doubleValue]];
        [UIView setAnimationCurve:[curve intValue]];
        // 更改输入框的位置
        _inputView.frame = containerFrame;
    }];
}
复制代码

_inputView便是存放输入框和View,就是跟随键盘上下移动的UIView ///