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 (после изменения текста и скрытия MenuBar) должно снова вызвать видимость строки меню. В этом случае я бы добавил код внутри singleTapRecognized, чтобы он отображался снова, но по какой-то причине singleTap UITapGestureRecognizer перестает работать, и, следовательно, метод singleTapRecognized больше не запускается. Итак, я начал с плана Б:
B) Решение, которое я пробовал, состояло в том, чтобы использовать невидимый UILabel, который я прикрепил визуально (а не программно) поверх UITextView. Я также сделал соответствующий ему IBOutlet и настроил ссылку. Теперь singleTap UIGestureRecognizer добавляется в UILabel, а не в UITextView. Проблема в том, что UITextView нельзя прокрутить или коснуться, потому что UILabel НАД ним и становится препятствием.
Любые идеи о том, как решить эту проблему? С каким планом лучше продолжить работу, с планом А или Б?