首页 > 代码库 > UITableView中cell里的UITextField不被弹出键盘挡住
UITableView中cell里的UITextField不被弹出键盘挡住
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来执行位移的动画,这个值是可以调整的。
UITableView中cell里的UITextField不被弹出键盘挡住
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。