2015-10-21 18:48:56 LBY5211ABC 阅读数 3695
  1. 需求场景描述
    最近项目里有个场景,搜索添加成员的时候,需要类似于微信创建讨论组加人时的效果:启动搜索输入文本,点击删除文本,当文本全删除完的时候,在点击删除按键,可以删除选中的人,或者取消搜索状态。

  2. 技术要点
    这里,最主要的难点就是监听键盘删除键的点击事件。不管你用的是UITextView还是UITextField,当它们本身没有内容的时候点击删除按键,其实delegate是没有任何响应的,这里就需要我们用其它的办法监听到点击事件。

  3. 实现过程
    查看API我们不难发现,其实系统是有事件抛出来的:

        ```
        @protocol UIKeyInput <UITextInputTraits>
    
        - (BOOL)hasText;
        - (void)insertText:(NSString *)text;
        - (void)deleteBackward;
    
        @end
        ```
    

    所以,我们现在要做的就是实现这个协议,拿到deleteBackward的回调。
    不过这个协议已经被UITextField实现了:

        NS_CLASS_AVAILABLE_IOS(2_0) @interface UITextField : UIControl <UITextInput, NSCoding> 
    

    但是UITextFieldDelegate并没有抛出来。
    所以,我们要做的就是从UITextField里面抛出这个协议。
    自定义一个类,继承UITextField
    自定义的KeyInputTextField
    .m文件里的实现

    到此,我们已经能知道键盘的删除事件了,后面需要做什么逻辑,直接在deleteBackward回调里做就OK!

2017-05-18 15:23:11 w6524587 阅读数 1998

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];

个人认为这一个就能完成时间和高度 没必要再监听其他

- (void)keyboardDidChangeFrame:(NSNotification *)noti

{

    self.duration = [noti.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];

    NSLog(@"%f", self.duration);

    NSValue *value = [noti.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];

    CGSize keyboardSize = [value CGRectValue].size;

    NSLog(@"%@", NSStringFromCGSize(keyboardSize));

}


2018-12-26 11:14:26 abc_26zm 阅读数 475

兼容ios软键盘把布局顶上去,点击失效
//封装方法
$.fn.scrollTo =function(options){
var defaults = {
toT : 0, //滚动目标位置
durTime : 100, //过渡动画时间
delay : 30, //定时器时间
callback:null //回调函数
};
var opts = $.extend(defaults,options),
timer = null,
_this = this,
curTop = _this.scrollTop(),//滚动条当前的位置
subTop = opts.toT - curTop, //滚动条目标位置和当前位置的差值
index = 0,
dur = Math.round(opts.durTime / opts.delay),
smoothScroll = function(t){
index++;
var per = Math.round(subTop/dur);
if(index >= dur){
_this.scrollTop(t);
window.clearInterval(timer);
if(opts.callback && typeof opts.callback == ‘function’){
opts.callback();
}
return;
}else{
_this.scrollTop(curTop + index*per);
}
};
timer = window.setInterval(function(){
smoothScroll(opts.toT);
}, opts.delay);
return _this;
};
最后input失去焦点自动滚动一下
直接调用,二选其一
$(“html,body”).scrollTo({toT:document.body.offsetHeight})
或者
$(".card").blur(function(){ $(“html,body”).scrollTo({toT:“1000000”})})

2016-12-30 10:13:37 tengong009 阅读数 391

这段时间项目里频繁用到了键盘输入,所以这里简单整理一个监听键盘的方法,不多说直接贴代码:

#pragma mark - 键盘约束

- (void)keyboardWillChange:(NSNotification *)notification{
    // 拿到键盘弹出时间
    double duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    // 计算transform

    CGFloat keyboard_Y;

    keyboard_Y = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue].origin.y;

    CGFloat y ;

    y = keyboardY - [[UIScreen mainScreen] bounds].size.height;

   
    [UIView animateWithDuration:duration animations:^{
        userView.transform = CGAffineTransformMakeTranslation(0, y);
    }];
}
    // 监听键盘
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChange:) name:UIKeyboardWillChangeFrameNotification object:nil];
2016-08-15 22:15:10 heberan 阅读数 12053

ios键盘(搜索按钮)

//键盘右下角  

//枚举
typedef NS_ENUM(NSInteger, UIReturnKeyType) {
    UIReturnKeyDefault,             //默认:灰色按钮,标有Return
    UIReturnKeyGo,                  //标有Go的蓝色按钮
    UIReturnKeyGoogle,              //标有Google的蓝色按钮,用于搜索
    UIReturnKeyJoin,                //标有Join的蓝色按钮
    UIReturnKeyNext,                //标有Next的蓝色按钮 
    UIReturnKeyRoute,               //标有Route的蓝色按钮 
    UIReturnKeySearch,              //标有Search的蓝色按钮
    UIReturnKeySend,                //标有Send的蓝色按钮
    UIReturnKeyYahoo,               //标有Yahoo!的蓝色按钮,用于搜索
    UIReturnKeyDone,                //标有Done的蓝色按钮
    UIReturnKeyEmergencyCall,       //紧急呼叫按钮
    UIReturnKeyContinue NS_ENUM_AVAILABLE_IOS(9_0),
};

//用法用例:  
xxx.returnKeyType = UIReturnKeyGo;  

这个时候你发现按钮不管用
那么我们该看看代理到底有什么方法

//UITextFieldDelegate  
- (BOOL)textFieldShouldReturn:(UITextField *)textField;  

类似这个方法 就可以加处理了


修改时间

2016年08月15日22:14:38

ios 定制键盘

阅读数 2059

没有更多推荐了,返回首页