iOS键盘与文本框的处理(二)

        上文,我们叙述来了键盘与文本框最简单的情况,接下来,我们来讲一讲在tableview中多个文本框与键盘的处理。我们在每一行cell都添加上了文本框,cell过多的话是可以滚动的,这里的textfield的位置就是不固定的,所以上文的方法,我们就不能再用了。在这里那么我们怎么样才能知道要编辑的textfield的坐标呢?这里我们用了一个比较常用的方法:CGPoint p=EditField.ConvertPointToView(new CGPoint(0,30),tableview.Window);这个方法的就是首先确定一个在cell里面的位置,比如说这里就是确定了cell里面坐标为(0,30)的点,然年将这个点转换成在整个tablevie里面的坐标,这样我们就可以获得了这个坐标。现在我们找到这个坐标,我们是不是可以用到了上文中的方法,但是,还是还是会出现一定的问题,会出现文本框不停的调整的问题。那么我们这里才用了ContentOffset,我来给大家解释一下,它相当于一个窗口,然后通过这个窗口,能够看到外面的世界,而且这个窗口还是可以移动的,这个窗口就相当于我们手机的整个屏幕,整个tableview就是我们通过窗口看到的外面的世界。外面的世界也是一个坐标系的平面,窗口也是一个独立的坐标系,但是窗口相对于外面的平面也是有一个坐标的(也就是两个顶点之间的偏移量)。

   这里我们通过键盘的监听事件,来处理当前正在编辑的文本的坐标,通过判断键盘的坐标和文本框的底部坐标判断,然后通过一个动画来使tableview整个的移动。

   代码如下:

EditField=new UITextField(new CoreGraphics.CGRect(10,5,250,44));
				EditField.Text=data[(int)indexPath.Row].LeftLabel;
				EditField.KeyboardType=UIKeyboardType.Default;
				EditField.ReturnKeyType=UIReturnKeyType.Done;
				EditField.ShouldReturn=delegate {
					return EditField.ResignFirstResponder();
				};
				//程序开始编辑
				EditField.AddTarget(delegate {
                                        //获得文本框的位置
					CGPoint p=EditField.ConvertPointToView(new CGPoint(0,30),tableview.Window);
					cellBotton=p.Y;
					CGPoint oldP=tableview.ContentOffset;
					keyboardWillShow=UIKeyboard.Notifications.ObserveWillShow((s,e)=>{
						CGRect kbFrame=e.FrameEnd;
						nfloat kbdMinY=UIScreen.MainScreen.Bounds.Height-kbFrame.Height;
					        //键盘与文本框底部两者坐标进行判断
						if(cellBotton>kbdMinY)
						{
							nfloat dis=(nfloat)Math.Abs((float)(cellBotton-kbdMinY));
							oldP.Y+=dis;
							UIView.Animate(0.1,()=>{
								tableview.ContentOffset=oldP;
							},()=>{cellBotton=0;});
						}

					});
				},UIControlEvent.EditingDidBegin);

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值