A)首先,我将公开我试图解决这个问题的方式,而不使用不可见的 UILabel
1) 第一次点击 UITextView 使其成为第一响应者。这将是默认行为(无需为此添加代码),但由于点击识别器应该稍后触发其他操作,因此还需要创建个性化的点击识别器:
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapRecognized:)];
[singleTap setNumberOfTapsRequired:1];
[TextView addGestureRecognizer:singleTap];
[TextView setUserInteractionEnabled:YES];
[singleTap release];
-(IBAction)singleTapRecognized:(id)sender
{
[TextView becomeFirstResponder];
}
2) 当文本改变时,菜单栏应该被隐藏。这不会产生任何问题,因为它只需要在 TextViewDidChange 中添加代码:
- (void)textViewDidChange:(UITextView *)textView
{
if (bTitleBar)
{
bTitleBar = NO;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.30f];
menuBar.transform =
CGAffineTransformMakeTranslation(
menuBar.frame.origin.x,
-50
);
CGRect newFrameSize;
currentOrientation = [UIApplication sharedApplication].statusBarOrientation;
if (currentOrientation==UIInterfaceOrientationPortrait ||currentOrientation==UIInterfaceOrientationPortraitUpsideDown)
{
newFrameSize = CGRectMake(96, 0, txtMain.frame.size.width, 605);
}
else
{
newFrameSize = CGRectMake(96, 0, txtMain.frame.size.width, 270);
}
textView.frame = newFrameSize;
[UIView setAnimationDuration:0];
}
}
3)接下来点击 UITextView(在文本更改并且菜单栏被隐藏之后)应该再次触发对菜单栏的可见性。在这种情况下,我会在 singleTapRecognized 中添加代码,以便再次显示它,但由于某种原因,UITapGestureRecognizer singleTap 停止工作,因此不再触发 singleTapRecognized 方法。所以我从 B 计划开始:
B)我尝试的解决方案是使用一个不可见的 UILabel,我在 UITextView 上以视觉方式(不是以编程方式)附加。我还制作了其对应的 IBOutlet 并设置了参考。现在 UIGestureRecognizer singleTap 被添加到 UILabel 而不是 UITextView。问题是 UITextView 无法滚动或点击,因为 UILabel 超过它并成为障碍。
关于如何解决这个问题的任何想法?继续使用哪个更好,A 计划还是 B 计划?