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 е НАД него и се превръща в пречка.
Някакви идеи как да се реши това? Кое е по-добре да продължите да работите, план А или Б?