textViewDidBeginEditing - 确定正在编辑哪个文本框

Posted

技术标签:

【中文标题】textViewDidBeginEditing - 确定正在编辑哪个文本框【英文标题】:textViewDidBeginEditing - determining which text box is being edited 【发布时间】:2013-04-30 06:03:18 【问题描述】:

我有一个包含 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];
 

【问题讨论】:

我不太明白。你有 5 个 UITextViews 和 5 个 UILabels?并且您想知道哪个标签属于刚刚单击的文本视图? 是的,但我们可以忽略标签。问题是我有一个 UITextView 叫做observationComment。当我在此文本视图中单击时,动画效果很好。现在我又添加了 4 个 UITextView,我想为它们中的每一个设置不同的动画,但是当我点击其中的任何一个时,observationComment 框架就会动画。我正在尝试弄清楚如何从 textViewDidBeginEditing 方法中区分不同的 UITextViews。 我相信这可能是你最好的选择***.com/questions/1823317/… 【参考方案1】:

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

YourViewController.h:

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

YourViewController.m:

-(void) textViewDidBeginEditing:(UITextView *)observationComment

    if (observationComment == tv1)
        // animation 1
    else if (observationComment == tv2)
        // animation 2
    ... and so on ...

【讨论】:

【参考方案2】:

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

- (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;
        
    

【讨论】:

我已经为每个文本框添加了标签,但似乎无法锻炼如何从 textViewDidBeginEditing 方法中引用标签。 我已经更新了我的答案,展示了如何在委托方法中引用标签。【参考方案3】:

标签解决方案完美运行:

-(void) textViewDidBeginEditing: (UITextView *) obsComment

if (obsComment.tag == 1)

... animations

else if (obsComment.tag == 2)

... animations

感谢大家的建议和帮助。

【讨论】:

以上是关于textViewDidBeginEditing - 确定正在编辑哪个文本框的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 中的 UITextView 在 `textViewDidBeginEditing` 方法中首次分配失败

textViewDidBeginEditing 快速在 2 个单独的 textViews 上

NSLayoutConstraint 激活/停用

IOS textView 委托

无法在 Swift 中滚动 textview

UITextView 没有在 UICollectionViewCell 内启动