2012-10-04 3 views
0

A) Сначала я разоблачить, как я пытаюсь решить эту проблему без использования невидимого UILabelИспользование невидимых UILabel и триггер UITextView события или не используя UILabel и обрабатывать UITextView крана распознавателей

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:

B) Решение, которое я пробовал, состояло в использовании невидимого UILabel, который я визуально (не программно) прикреплял к UITextView. Я также сделал соответствующий IBOutlet и установил ссылку. Теперь унифицированный UIGestureRecognizer добавлен в UILabel, а не в UITextView. Проблема в том, что UITextView нельзя прокручивать или использовать, потому что UILabel OVER это и становится препятствием.

Любые идеи о том, как это решить? Что лучше продолжать работать с планом A или B?

ответ

0

Я думаю, что я поеду в план C. Если вы введете в журнал свойство grecureRecognizers текстового вида, вы увидите, что есть куча из них, так что возиться с ними кажется чревато трудностями. Обычно второй щелчок в текстовом представлении меняет выбор (или поднимает заменяющий текст) и вызывает метод textViewDidChangeSelection: - я бы использовал этот метод и проверял, скрыта ли панель меню или нет, - если это, верните его, а затем вызовите super textViewDidChangeSelection: чтобы текстовое представление могло выполнять свою работу.

Смежные вопросы