0

我有一个包含 5 个UITextView对象的页面。我使用该textViewDidBeginEditing:方法为observationComment文本框设置动画,效果很好。但是现在我想对其他 4 个做同样的事情,但我似乎无法弄清楚如何确定哪个文本视图被点击了。observationComment每次我点击其他任何一个时,都会触发文本框。

-(void) textViewDidBeginEditing:(UITextView *) observationComment
{
    [self.view bringSubviewToFront:observationComment];

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.5];
    obsCommentLabel.frame= CGRectMake(192, 113, 148, 21);
    observationComment.frame=CGRectMake(191, 135, 710, 250);
    [UIView commitAnimations];
} 
4

3 回答 3

1

传递给委托方法的对象是通用的,所以就像你说的,它将用于所有文本视图。

- (void)textViewDidBeginEditing:(UITextView *)textView

要区分文本视图,您需要保留对 UITextView(IBOutlet 或其他)的引用作为属性,然后与textView这些属性进行比较,或者将每个 UITextView 上的标签属性设置为唯一整数并检查标签以判断哪个是哪个。使用

#define OBSERVATION_COMMENT_TAG 1001

然后检查OBSERVATION_COMMENT_TAG使您的代码比在代码中硬编码标签常量更具可读性。要从 -textViewDidBeginEditing: 委托方法中引用标记,您将使用tag视图本身的属性

- (void)textViewDidBeginEditing:(UITextView *)textView {
    NSInteger tag = [textView tag];
    switch (tag) {
        case OBSERVATION_COMMENT_TAG:
        {
            // observation comment text view
            break;
        }
        case ADDITIONAL_TEXTVIEW_TAG:
        {
            // additional text view
            break;
        }
    }
}
于 2013-04-30T06:10:12.680 回答
1

我不喜欢以下解决方案,但它适用于您的条件:

你的视图控制器.h:

UITextView *tv1, *tv2, *tv3, *tv4, *tv5;

你的视图控制器.m:

-(void) textViewDidBeginEditing:(UITextView *)observationComment
{
    if (observationComment == tv1)
        // animation 1
    else if (observationComment == tv2)
        // animation 2
    ... and so on ...
}
于 2013-04-30T13:13:54.820 回答
0

标签解决方案完美运行:

-(void) textViewDidBeginEditing: (UITextView *) obsComment
{
if (obsComment.tag == 1)
{
... animations
}
else if (obsComment.tag == 2)
{
... animations
}

感谢大家的建议和帮助。

于 2013-05-01T17:15:47.840 回答