3

Я просто хочу сделать свой файл uitextview доступным для редактирования, если пользователь делает двойной щелчок на нем.Двойной кран uitextview

Но в моем коде он работает только один раз. После того, как мы спрятали клавиатуру, дважды нажмите кнопку , работая так, как я хочу. Это показывает только «копировать и определить» всплывающее окно, если я попытаюсь это во второй раз ...

Может быть «textViewDidEndEditing» не правильный путь для этого ...

Вот код:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    CGFloat screen_height = [UIScreen mainScreen].bounds.size.height; 
    CGFloat screen_width = [UIScreen mainScreen].bounds.size.width; 

    scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0,0,screen_width,screen_height)]; 
    scrollView.showsVerticalScrollIndicator=NO; 
    scrollView.scrollEnabled=NO; 
    scrollView.userInteractionEnabled=YES; 
    [scrollView setBackgroundColor:[UIColor colorWithRed: 0.0 green: 0.0 blue: 0.0 alpha: 0.5]]; 
    [self.view addSubview:scrollView]; 
    scrollView.contentSize = CGSizeMake(screen_width,screen_height); 

    MyTextView = [[UITextView alloc]initWithFrame:CGRectMake(0, 0, screen_width, screen_height)]; 
    MyTextView.text = @"Headline\nNo1"; 
    MyTextView.textColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0]; 
    [MyTextView setFont:[UIFont fontWithName:@"Helvetica" size:90]]; 
    MyTextView.textAlignment = NSTextAlignmentCenter; 
    MyTextView.delegate = self; 
    [MyTextView setScrollEnabled:NO]; 
    [MyTextView setEditable:NO]; 
    [MyTextView setUserInteractionEnabled:YES]; 
    [MyTextView setBackgroundColor:[UIColor colorWithRed: 0.0 green: 0.0 blue: 0.0 alpha: 0.0]]; 
    [MyTextView sizeToFit]; 
    [scrollView addSubview:MyTextView]; 

    // TAP 
    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTap:)]; 
    [doubleTap setNumberOfTapsRequired:2]; 
    [doubleTap setNumberOfTouchesRequired:1]; 
    [MyTextView addGestureRecognizer:doubleTap]; 

    // KEYBOARD 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil]; 

} 

- (void)didReceiveMemoryWarning { 

    [super didReceiveMemoryWarning]; 
} 


-(void)doubleTap:(UITapGestureRecognizer *)sender { 

    NSLog(@"View: %@", [[sender view] class]); 
    UITextView *tappedView = (UITextView *)[sender view]; 
    [tappedView setEditable:YES]; 
    [tappedView becomeFirstResponder]; 
} 


-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { 

    if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) { 

     if (((UITapGestureRecognizer *)gestureRecognizer).numberOfTapsRequired == 2) { 
      return YES; 
     } 
    } 
    return YES; 
} 


-(BOOL)canBecomeFirstResponder { 

    if (MyTextView.editable == YES) { 
     return YES; 
    } 
    else { 
     return NO; 
    } 
} 


- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGesture { 

    return YES; 
} 


-(void)textViewDidEndEditing:(UITextView *)textView { 

    [textView setEditable:NO]; 
} 


-(void)keyboardDidHide:(NSNotification *)aNotification { 

    NSLog(@"keyboardDidHide"); 

    // [textView setEditable:NO]; // same result like textViewDidEndEditing 
} 

ответ

2

Удалить/комментарий [textView setEditable:NO]; от метода
-(void)textViewDidEndEditing:(UITextView *)textView.

Это единственное, что вызывает у вас проблемы. потому что лучший способ остановить режим редактирования UITextView/UItextField - это вызов метода resignFirstReponder.

EDIT

Для Скрытие клавиатуры добавьте следующие строки в viewDidLoad метод

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)]; 
[self.view addGestureRecognizer:singleTap]; 

чем добавить hideKeyboard следующим

-(void) hideKeyboard 
{ 
    [MyTextView resignFirstResponder]; 
} 
+0

Работает как очарование! Спасибо! –

0

Все будет просто, если вы добавите четкий вид над текстовым изображением и добавите жест двойного касания на четкий вид. Когда двойное нажатие распознано, удалите четкое представление и сделать TextView стать первым респондентом

[clearView removeFromSuperview] ; 
[textview becomeFirstResponder] ; 
+0

я попробовать его. Спасибо за вашу «прагматичную» идею! –

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