UITableView中cell里的UITextField不被弹出键盘挡住

效果如下:

源码:

EditCell.h 与 EditCell.m

//
//  EditCell.h
//  Cell
//
//  Created by YouXianMing on 14/12/18.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface EditCell : UITableViewCell

@property (nonatomic, strong) UITextField *field;

@end
//
//  EditCell.m
//  Cell
//
//  Created by YouXianMing on 14/12/18.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "EditCell.h"

@implementation EditCell

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        UIView *line         = [[UIView alloc] initWithFrame:CGRectMake(0, 43, 320, 1)];
        line.backgroundColor = [UIColor colorWithRed:0.886 green:0.918 blue:0.933 alpha:1];
        [self addSubview:line];

        _field               = [[UITextField alloc] initWithFrame:CGRectMake(20, 2, 280, 42)];
        _field.textColor     = [UIColor grayColor];
        _field.font          = [UIFont fontWithName:@"HelveticaNeue-Thin" size:18];
        [self addSubview:_field];
    }

    return self;
}

@end

ViewController.m

//
//  ViewController.m
//  Cell
//
//  Created by YouXianMing on 14/12/18.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "ViewController.h"
#import "EditCell.h"

static NSInteger number = 8;

@interface ViewController ()<UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate>

@property (nonatomic, strong) UITableView    *tableView;
@property (nonatomic, weak)   UITextField    *tmpTextField; // 获取当前编辑的TextField
@property (nonatomic, strong) NSMutableArray *strsArray;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // 数据源(初始化)
    _strsArray = [NSMutableArray array];
    for (int i = 0; i < number; i++) {
        [_strsArray addObject:@""];
    }

    // 初始化tableView
    _tableView = [[UITableView alloc] initWithFrame:self.view.bounds
                                              style:UITableViewStylePlain];
    _tableView.backgroundColor = [UIColor colorWithRed:0.949 green:0.957 blue:0.961 alpha:1];
    [self.view addSubview:_tableView];

    _tableView.delegate       = self;
    _tableView.dataSource     = self;
    _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    [_tableView registerClass:[EditCell class] forCellReuseIdentifier:@"YouXianMing"];

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return number;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    EditCell *cell      = [tableView dequeueReusableCellWithIdentifier:@"YouXianMing"];
    cell.field.delegate = self;
    cell.field.text     = _strsArray[indexPath.row];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    return cell;
}

#pragma mark - UITextField代理
- (void)textFieldDidBeginEditing:(UITextField *)textField {

    // 获取到临时的textField并存储起来
    self.tmpTextField = textField;

    // 获取到父类cell
    EditCell *cell    = (EditCell *)[self.tmpTextField superview];

    // 获取到indexPath
    NSIndexPath *path = [self.tableView indexPathForCell:cell];

    // 执行动画(移动到输入的位置)
    [self.tableView setContentOffset:CGPointMake(0, (path.row)*44) animated:YES];
}
- (void)textFieldDidEndEditing:(UITextField *)textField {
    // 获取到临时的textField并存储起来
    self.tmpTextField = textField;

    // 获取到父类cell
    EditCell *cell    = (EditCell *)[self.tmpTextField superview];

    // 获取到indexPath
    NSIndexPath *path = [self.tableView indexPathForCell:cell];

    // 存储到数据源中
    [_strsArray replaceObjectAtIndex:path.row
                          withObject:(textField.text == nil ? @"" : textField.text)];

    // 打印信息
    NSLog(@"%@", _strsArray);
}
- (BOOL)textFieldShouldReturn:(UITextField *)sender {

    // 执行动画(恢复到原始位置)
    [self.tableView setContentOffset:CGPointMake(0, 0) animated:YES];

    // 交出第一响应者
    [sender resignFirstResponder];

    return YES;
}

@end

以下是需要注意的地方:

通过父视图获取到了cell,然后根据cell获取indexPath值,然后可以做事情了

核心代码是根据第几个cell来执行位移的动画,这个值是可以调整的。

时间: 2024-12-14 18:44:39

UITableView中cell里的UITextField不被弹出键盘挡住的相关文章

UITextField弹出键盘挡住输入框问题

//开始编辑输入框的时候,软键盘出现,执行此事件 -(void)textFieldDidBeginEditing:(UITextField *)textField { CGRect frame = [textField convertRect:textField.frame toView:self.view]; //上移数值,根据自己情况调整 int offset = frame.origin.y - 100 - (UISCROEEN_SIZE.height - 216.0);//键盘高度216

UITableView中cell边框和背景设置最佳方案

UITableView是iOS开发中最常用的视图控件,在平常用的iOS App中大部分都用到了UITableView. 需求很简单,就是在一个UITableView里面实现一个不一样的UITableViewCell,如下图里的“切换账号”按钮 正常情况下grouped样式(UITableViewStyleGrouped)UITableViewCell都是有边框的,所以如果只是用addSubView添加一个按钮的话,就会有边框在外面,不符合要求,也想过用一个大的图片,把这个cell给盖住,但是感觉

UITableView中Cell和section的插入与删除

插入段: - (void)insertSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation; - (void)deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation; 插入行: - (void)insertRowsAtIndexPaths:(NSArray *)

IOS问题汇总:2014-12-2 xcode6中iphone5模拟器中运行textfield不弹出键盘+点击return收键盘

1.xcode6中iphone5模拟器中运行textfield不弹出键盘 Hardware->Keyboard->Toggle Software Keyboard手动激活键盘 2.点击return收键盘(1)按住Ctrl,选中TextField,拖拽至ViewController使二者连接.(2)在.h中@interface那行添加.(3)在.m中添加代码: -(BOOL) textFieldShouldReturn:(UITextField *)textField{if (textField

关于android中EditText自动获取焦点并弹出键盘的相关设置

在android开发中,关于EditText自动获取焦点弹出键盘,我们可能又是会有让键盘自动弹出的需求,有时可能又会有不想让键盘自动弹出的需求,下面是我所总结的两种方法: 需求:EditText自动获取焦点并弹出键盘,代码: EditText.setFocusable(true); EditText.setFocusableInTouchMode(true); EditText.requestFocus(); 需求:EditText不会自动获取焦点并且不会弹出键盘,代码:  将其父控件设置: P

解决UITableView中Cell重用机制导致内容出错的方法总结

UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的 UITableViewCell,可以让UITableViewCell响应一些点击事件,也可以在UITableViewCell中加入 UITextField或者UITextView等子视图,使得可以在cell上进行文字编辑. UITableView中的cell可以有很多,一般会通过重用cell来达到节省内存的目的:通过为每个cell指定一个重用标识符 (reuseIdentif

iOS如何固定UITableView中cell.imageView.image的图片大小

凡是进行ios开发的,基本上都会遇到要展示列表,或者即使不是标准列表,但由于数量不固定,也需要如同列表一样从上往下显示.加载的情况.这些,都绕不过对UITableView的使用. 在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似于微信.QQ.新浪微博等软件基本上随处都是UITableView.当然它的广泛使用自然离不开它强大的功能. 我们经常在开发过程中会用到默认UITableView的cell.imageView.image,如果图

[IOS开发教程] iOS如何固定UITableView中cell.imageView.image的图片大小

凡是进行ios开发的,基本上都会遇到要展示列表,或者即使不是标准列表,但由于数量不固定,也需要如同列表一样从上往下显示.加载的情况.这些,都绕不过对UITableView的使用. 在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似于微信.QQ.新浪微博等软件基本上随处都是UITableView.当然它的广泛使用自然离不开它强大的功能. 我们经常在开发过程中会用到默认UITableView的cell.imageView.image,如果图

UITableView的多个UITextField时,有的被键盘挡住怎么解决

在UITableView中,经常有很多表单需要输入,有的表单比较靠下,一点击输入时键盘就会弹出,弹出有时候会盖住输入框,那怎么办呢? 调用下面的方法,当然你输入的UITextField要有delegate = self. 当前的viewController要实现UITextFieldDelegate. [cpp] view plaincopy - (void)textFieldDidBeginEditing:(UITextField *)textField { [self.tableView s