广

IOS开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    iOS应用开发中监听键盘事件的代码实例小结

    2018-04-05 08:31:50 次阅读 稿源:互联网
    广告

    1.注册监听键盘事件的通知

    代码如下:

        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(keyboardWillShow:)
                                                     name:UIKeyboardWillShowNotification
                                                   object:nil];
       
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(keyboardShow:)
                                                     name:UIKeyboardDidShowNotification
                                                   object:nil];
       
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(keyboardWillHide:)
                                                     name:UIKeyboardWillHideNotification
                                                   object:nil];
       
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(keyboardHide:)
                                                     name:UIKeyboardDidHideNotification
                                                   object:nil];

    2.在键盘将要出现和隐藏的回调中,加入动画

    代码如下:

    - (void)keyboardWillShow:(NSNotification *)notif {
        if (self.hidden == YES) {
            return;
        }
       
        CGRect rect = [[notif.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
        CGFloat y = rect.origin.y;
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.25];
        NSArray *subviews = [self subviews];
        for (UIView *sub in subviews) {
           
            CGFloat maxY = CGRectGetMaxY(sub.frame);
            if (maxY > y - 2) {
                sub.center = CGPointMake(CGRectGetWidth(self.frame)/2.0, sub.center.y - maxY + y - 2);
            }
        }
        [UIView commitAnimations];
    }

    - (void)keyboardShow:(NSNotification *)notif {
        if (self.hidden == YES) {
            return;
        }
    }

    - (void)keyboardWillHide:(NSNotification *)notif {
        if (self.hidden == YES) {
            return;
        }
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.25];
        NSArray *subviews = [self subviews];
        for (UIView *sub in subviews) {
            if (sub.center.y < CGRectGetHeight(self.frame)/2.0) {
                sub.center = CGPointMake(CGRectGetWidth(self.frame)/2.0, CGRectGetHeight(self.frame)/2.0);
            }
        }
        [UIView commitAnimations];
    }

    - (void)keyboardHide:(NSNotification *)notif {
        if (self.hidden == YES) {
            return;
        }
    }

    3.监听键盘删除键之非代理实现
    在UITextField 和 UITextView ,如何监听到删除键。

    我看到网上都是用代理监听的,我觉得不靠谱。

    其实苹果已经写的很清楚了。

    就在他们实现的协议里面~~
    代码如下:

    NS_CLASS_AVAILABLE_IOS(2_0) @interface UITextView : UIScrollView<UITextInput>
    @protocol UITextInput<UIKeyInput>
    @protocol UIKeyInput <UITextInputTraits>

    - (BOOL)hasText;

    - (void)insertText:(NSString *)text;

    - (void)deleteBackward;

    @end

    写的非常清楚,一看就明白。

    -deleteBackward 这个方法就是删除按钮监听。

    只要自己写个子类,重写此方法就能监听。

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告