0

我有一个 UITextview,成为第一响应者并出现键盘。目前,我在 inputAccessoryView 工具栏中有按钮,可以通过字符串数组向前和向后交换文本。我的过程没有问题,所以我当然倾向于打破它。我的愿望是像旋转木马一样左右滑动文本视图,以使用户更清楚地知道下一个或上一个字符串来来去去。当前系统只是简单地替换没有动画的文本。

我的第一个想法是创建一个 UINavigationController,给它一个 UIViewControllers 数组来呈现 UITextviews。导航控制器视图仅与文本视图一样大,我将其作为子视图添加到我的完整视图(它本身在导航控制器中)。我得到了这个工作相当完整,导航栏是隐藏的,它看起来与原始文本视图没有什么不同,除了文本视图现在向右或向左滑动,这取决于我是推动还是弹出。问题在于键盘与关闭的视图控制器一起滑落,然后新控制器中的新文本视图成为第一响应者并且键盘返回。关闭,但没有雪茄。

我考虑过使用页面视图控制器,但它似乎也会有同样的问题。我想我可能不得不回到单个文本视图并直接使用静态屏幕抓取为整个过程设置动画。这完全超出了我的经验水平,我认为必须有一种更简单的方法。

任何人都可以建议一种简单的方法来保持该键盘在按所述交换视图时保持存在吗?关于其他攻击角度的建议?

4

1 回答 1

0

对于一个简单的动画来说,这似乎是一个非常大的开销。

尝试这样的事情(假设 ARC):

typedef enum _eDirection
{
    rightToLeft = -1,
    leftToRight = 1
} eDirection;

- (void) animateTextFields:(eDirection)direction
{
    CGFloat distance = self.window.bounds.size.width;
    UITextField *oldTextField = thisView.textField;
    CGRect oldTFRect = oldTextField.frame;
    CGRect newTFRect = CGRectOffset(oldTFRect, -direction * distance, 0);
    UITextField *newTextField = [[UITextField alloc] initWithFrame:newTFRect];
    [newTextField setText:@"whatever"];
    [self addSubview:newTextField];
    [UIView animateWithDuration:0.3f
                     animations:^{
                         [oldTextField setFrame:CGRectOffset(oldTextField.frame, direction * distance, 0)];
                         [newTextField setFrame:CGRectOffset(newTextField.frame, direction * distance, 0)];
                     } completion:^(BOOL finished) {
                         [self setTextField:newTextField];
                         [self removeSubview:oldTextField];
                         [newTextField becomeFirstResponder];
                     }];
 }

免责声明:与从头顶输入的所有代码一样,等等)

此方法将创建一个新的 textField,将其水平动画到屏幕上,同时按照您指定的方向将现有的 textField 移出屏幕,然后将新的 textField 分配为当前的并使其成为 firstResponder。

于 2012-09-30T20:04:09.787 回答