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` 方法中首次分配失败