Ios TextFields委托在SplitViewController的详细视图控制器中不工作

Ios TextFields委托在SplitViewController的详细视图控制器中不工作,ios,objective-c,ipad,delegates,uitextfield,Ios,Objective C,Ipad,Delegates,Uitextfield,我使用这些方法使视图“动画化”,以防止键盘覆盖文本字段,它在iPhone和普通iPad视图控制器上都能完美工作。但是如果我在分割视图控制器的细节视图控制器中使用它们,它就不起作用了。 p、 是的,我按Ctrl键将代理拖到视图中 CGFloat animatedDistance; static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3; static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2; st

我使用这些方法使视图“动画化”,以防止键盘覆盖文本字段,它在iPhone和普通iPad视图控制器上都能完美工作。但是如果我在分割视图控制器的细节视图控制器中使用它们,它就不起作用了。 p、 是的,我按Ctrl键将代理拖到视图中

CGFloat animatedDistance;
static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3;
static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2;
static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.8;
static const CGFloat PORTRAIT_KEYBOARD_HEIGHT = 216;
static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 162;

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    //move view when begin editing a TextField (avoid keyboard to hide it)
    CGRect textFieldRect =
    [self.view.window convertRect:textField.bounds fromView:textField];
    CGRect viewRect =
    [self.view.window convertRect:self.view.bounds fromView:self.view];

    CGFloat midline = textFieldRect.origin.y + 0.5 * textFieldRect.size.height;
    CGFloat numerator =
    midline - viewRect.origin.y
    - MINIMUM_SCROLL_FRACTION * viewRect.size.height;
    CGFloat denominator =
    (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION)
    * viewRect.size.height;
    CGFloat heightFraction = numerator / denominator;

    if (heightFraction < 0.0)
    {
        heightFraction = 0.0;
    }
    else if (heightFraction > 1.0)
    {
        heightFraction = 1.0;
    }

    CGRect viewFrame = self.view.frame;
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
    if (orientation == UIInterfaceOrientationPortrait ||
        orientation == UIInterfaceOrientationPortraitUpsideDown)
    {
        animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction);
        viewFrame.origin.y -= animatedDistance;
    }
    else
    {
        animatedDistance = floor(LANDSCAPE_KEYBOARD_HEIGHT * heightFraction);
        viewFrame.origin.x += animatedDistance;
    }

    //CGRect viewFrame = self.view.frame;
    //viewFrame.origin.y -= animatedDistance;

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];

    [self.view setFrame:viewFrame];

    [UIView commitAnimations];
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    //when keyboard is dismissed return to the original view
    CGRect viewFrame = self.view.frame;

    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
    if (orientation == UIInterfaceOrientationPortrait ||
        orientation == UIInterfaceOrientationPortraitUpsideDown)
    {
        viewFrame.origin.y += animatedDistance;
    }
    else {
        viewFrame.origin.x -= animatedDistance;
    }

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];

    [self.view setFrame:viewFrame];

    [UIView commitAnimations];
}
CGFloat动画距离;
静态常量CGFloat键盘\动画\持续时间=0.3;
静态常数CGFloat最小滚动分数=0.2;
静态常数CGFloat最大滚动分数=0.8;
静态常数CGFloat纵向键盘高度=216;
静态常数CGFloat横向键盘高度=162;
-(无效)textFieldDidBeginEditing:(UITextField*)textField
{
//开始编辑文本字段时移动视图(避免使用键盘将其隐藏)
CGRect textFieldRect=
[self.view.window convertRect:textField.bounds fromView:textField];
CGRect viewRect=
[self.view.window convertRect:self.view.fromView:self.view];
CGFloat midline=textFieldRect.origin.y+0.5*textFieldRect.size.height;
CGFloat分子=
中线-viewRect.origin.y
-最小滚动分数*viewRect.size.height;
浮点分母=
(最大滚动分数-最小滚动分数)
*viewRect.size.height;
CGFloat heightFraction=分子/分母;
如果(高度分数<0.0)
{
高度分数=0.0;
}
否则如果(高度分数>1.0)
{
高度分数=1.0;
}
CGRect viewFrame=self.view.frame;
UIInterfaceOrientation方向=[[UIApplication sharedApplication]statusBarOrientation];
如果(方向==UIInterfaceOrientationParative||
方向==UIInterfaceOrientationGraphitalUpsideDown)
{
动画距离=地板(纵向\键盘\高度*高度分数);
viewFrame.origin.y-=动画距离;
}
其他的
{
动画距离=地板(横向键盘高度*高度分数);
viewFrame.origin.x+=动画距离;
}
//CGRect viewFrame=self.view.frame;
//viewFrame.origin.y-=动画距离;
[UIView beginAnimations:nil上下文:NULL];
[UIView setAnimationBeginsFromCurrentState:是];
[UIView设置动画持续时间:键盘动画持续时间];
[self.view setFrame:viewFrame];
[UIView委员会];
}
-(void)textfielddidediting:(UITextField*)textField
{
//关闭键盘后,返回原始视图
CGRect viewFrame=self.view.frame;
UIInterfaceOrientation方向=[[UIApplication sharedApplication]statusBarOrientation];
如果(方向==UIInterfaceOrientationParative||
方向==UIInterfaceOrientationGraphitalUpsideDown)
{
viewFrame.origin.y+=动画距离;
}
否则{
viewFrame.origin.x-=动画距离;
}
[UIView beginAnimations:nil上下文:NULL];
[UIView setAnimationBeginsFromCurrentState:是];
[UIView设置动画持续时间:键盘动画持续时间];
[self.view setFrame:viewFrame];
[UIView委员会];
}

知道为什么不起作用吗?

你能在上述两种方法中的一种或两种方法中添加断点,看看它们在键盘显示或隐藏时是否被击中吗?是的,它们是,我放在其中的日志会显示出来