键盘return事件的响应,以及tableViewCell中控件的父视图(superView)


在实际开发中我遇到一种情况:我在自定义了一个tableViewCell,里面包含有多个textField用于给用户输入信息。但是每次点击这些textField的时候,系统都会弹出一个键盘,在不同size的iphone上不同程度地遮挡住了我的textField。关于如何解决这个问题,我在上一篇博文的时候已经提到,但是这里详细记录一下,但点击键盘return键的时候,是怎样可以获取到相应的tableView,然后对其进行动态移动的。


步骤:

1.要想监听键盘的return事件并对其进行响应,就必须设置好代理和在响应的类里面使用对应的协议,这里我在自定义的tableViewCell类中使用了UITextFieldDelegate协议。

@interface PMGCostTableSubviewCell : UITableViewCell <UITextFieldDelegate>

至于设置代理,只需要在Interface Builder中设置好各个textField的delegate指向fileOwner,也就是自定义的tableViewCell类就OK了。


2.监听到键盘的return事件后,响应的方法,这个方法在UITextFieldDelegate的协议中,使用了这个协议就能使用这个方法,代码如下:

    [textField resignFirstResponder];   //取消textField的第一响应,也就是退回键盘
    UIView *parentView = textField.superview.superview.superview.superview;    //获取到tableView
    
//    NSLog(@"%@",textField.superview);
//    NSLog(@"%@",textField.superview.superview);
//    NSLog(@"%@",textField.superview.superview.superview);
//    NSLog(@"%@",textField.superview.superview.superview.superview);
    //以下就是view的移动
    CGRect frame = parentView.frame;
    if (frame.origin.y == 0) {
        return NO;
    }
    if ([UIScreen mainScreen].bounds.size.height != 480) {
        frame.origin.y += 130;
    }
    else
    {
        frame.origin.y += frame.size.height*0.425;
    }
    [UIView beginAnimations:@"moveView" context:nil];
    [UIView setAnimationDuration:0.3];
    parentView.frame = frame;
    [UIView commitAnimations];
    return YES;

以上就是点击了return按钮,让tableView回到原来位置的方法,但是其中的难点就是,我们要如何通过自定义的tableViewCell中的一个textField来获取到包含了这个tableViewCell的tableView呢?

注释掉的那几行代码,就可以帮我们了解到,这个View之间是怎么包含的,取消注释,可以看到输入的对象依次是:

UITableViewCellContentView

SeanCostTableSubviewCell

UITableViewWrapperView

UITableView


所以,对于存放在自定义cell的控件,包着它的首先是一个contentView,接着才到自定义的tableViewCell,而自定义的Cell,还被一层WrapperView包着,最后才到TableView



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值