zoukankan      html  css  js  c++  java
  • iOS UI基础-10.0 QQ聊天布局之键盘及文本使用

    要实现的效果:

     

    这里只说用到的几个知识点

    1.图片包含文字

    在设置文字的Frame的时候,使用背景(按钮)的尺寸,文字使用了内边距

    背景图片,使用拉伸

    /**
     *  返回一张可以随意拉伸不变形的图片
     *
     *  @param name 图片名字
     */
    + (UIImage *)resizableImage:(NSString *)name
    {
        UIImage *normal = [UIImage imageNamed:name];
        CGFloat w = normal.size.width * 0.5;
        CGFloat h = normal.size.height * 0.5;
        return [normal resizableImageWithCapInsets:UIEdgeInsetsMake(h, w, h, w)];
    }

    使用的时候:

       [self.textView setBackgroundImage:[UIImage resizableImage:@"chat_send_nor"] forState:UIControlStateNormal];

    2. 给输入框增加空格符

        //  设置文本框左边显示的view
        self.inputView.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 8, 0)];
        // 永远显示
        self.inputView.leftViewMode = UITextFieldViewModeAlways;
    

    3.给输入框的键盘设置发送按钮

    设置为send ,并打上勾,如下图

    实现代理UITextFieldDelegate,部分代码

    @interface MJViewController () <UITextFieldDelegate>
    @property (weak, nonatomic) IBOutlet UITextField *inputView;
    @end
    
    @implementation MJViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        // 设置文本框代理
        self.inputView.delegate = self;
    }
    
    #pragma mark - 文本框代理
    /**
     *  点击了return按钮(键盘最右下角的按钮)就会调用
     */
    - (BOOL)textFieldShouldReturn:(UITextField *)textField
    {
        // 1.自己发一条消息
        [self addMessage:textField.text type:MJMessageTypeMe];
        
        // 2.自动回复一条消息
        NSString *reply = [self replayWithText:textField.text];
        [self addMessage:reply type:MJMessageTypeOther];
        
        // 3.清空文字
        self.inputView.text = nil;
        
        // 返回YES即可
        return YES;
    }

    4.键盘显示和关闭

    在viewDidLoad中,监听键盘

        // 2.监听键盘的通知
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];

    keyboardWillChangeFrame方法

    /**
     *  当键盘改变了frame(位置和尺寸)的时候调用
     */
    - (void)keyboardWillChangeFrame:(NSNotification *)note
    {
        // 设置窗口的颜色
        self.view.window.backgroundColor = self.tableView.backgroundColor;
        
        // 0.取出键盘动画的时间
        CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
        
        // 1.取得键盘最后的frame
        CGRect keyboardFrame = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
        
        // 2.计算控制器的view需要平移的距离
        CGFloat transformY = keyboardFrame.origin.y - self.view.frame.size.height;
        
        // 3.执行动画
        [UIView animateWithDuration:duration animations:^{
            self.view.transform = CGAffineTransformMakeTranslation(0, transformY);
        }];
    }

    关闭键盘

    /**
     *  当开始拖拽表格的时候就会调用
     */
    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
    {
        // 退出键盘
        [self.view endEditing:YES];
    }
  • 相关阅读:
    switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
    int和Integer有什么区别?
    访问修饰符public,private,protected,以及不写(默认)时的区别?
    Hashmap如何同步?
    Iterator和ListIterator的区别?
    Java的HashMap是如何工作的?
    MyBatis与Hibernate有哪些不同?
    Spring框架中有哪些不同类型的事件?
    Spring的自动装配?
    Spring如何处理线程并发问题?
  • 原文地址:https://www.cnblogs.com/jys509/p/4821804.html
Copyright © 2011-2022 走看看