2015-05-08 4 views
0

Так что это происходит.AlertView запускает клавиатуру после увольнения

У меня есть один контроллер вида, и он обрабатывает все виды предупреждений в моем приложении. У меня есть другой контроллер представления, который имеет UITextView, который пользователь может редактировать, и кнопку сохранения.

Когда они нажимают кнопку сохранения, если текст уже сохранен, он вызывает предупреждение, которое спрашивает их, уверены ли они, что они хотят обновить, и если они подтвердят, он обновит файл и даст им второе предупреждение что это успех.

Что происходит, когда клавиатура продолжает выскакивать при появлении второго предупреждения. Я попытался смириться с клавиатурой и отключить флаг активации взаимодействия с пользователем в текстовом поле, как только будет нажата кнопка сохранения.

self.storyEditorTextView.userInteractionEnabled=NO; 
[self.storyEditorTextView resignFirstResponder]; 

Я также попытался отключить его, когда предупреждение ответил на (поскольку некоторые предупреждения могут иметь текстовое поле).

Чтобы усугубить ситуацию, когда я прокомментирую строки resign и userInteractionsEnabled, в том числе один в предупреждении, клавиатура все еще появляется после того, как первое предупреждение уволено, исчезает, когда второе предупреждение отклоняется (если вы можете нажать на него потому что клавиатура закрывает его), и вы не можете использовать UITextView и выводить клавиатуру, не возвращаясь к родительскому виду.

Вот код предупреждения.

- (void)addPromptToFavorites 
{ 
// throw up an alert to confirm and get a name 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Name Your Favorite!" 
                 message:@"Would you like to add a name to your prompt?" 
                 delegate:self 
               cancelButtonTitle:@"Cancel" 
               otherButtonTitles:@"OK",nil]; 
     // add a text field 
     alert.alertViewStyle = UIAlertViewStylePlainTextInput; 
     UITextField *textField = [alert textFieldAtIndex:0]; 
     textField.text = @"My Great Prompt"; 

     // set the tag 
     [alert setTag:SAVE_FAVE]; 

     // Display the alert to the user 
     [alert show]; 
} 


- (void)updateFave: (NSNumber *) theFaveId 
{ 
    NSLog(@"UPDATE FAVE\n\nself.sharedFaveMan.tempFave %@",self.sharedFaveMan.tempFave); 
    // NSMutableDictionary *faveDict =[[NSMutableDictionary alloc] init]; 

    // loop through the favoritePrompts array until you find a match to the faveID 
    for (id element in self.sharedFaveMan.favoritePrompts) { 
     NSNumber *valueForID = [element valueForKey:@"id"]; 

     if([valueForID isEqualToNumber:theFaveId]) 
     { 
      self.sharedFaveMan.tempFave=element; 
     } 
    } 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Update Your Favorite!" 
                message:@"The story will be saved with the currently selected Favorite." 
                delegate:self 
              cancelButtonTitle:@"Cancel" 
              otherButtonTitles:@"OK",nil]; 

    //set the tag 
    [alert setTag:UPDATE_FAVE]; 

    // Display the alert to the user 
    [alert show]; 

} 

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
    UITextField *textField = [alertView textFieldAtIndex:0]; 

    [textField resignFirstResponder]; 

    if (buttonIndex !=0) 
    { 
     if(alertView.tag==UPDATE_FAVE) 
     { 
      NSLog(@"Updating Fave"); 
      // loop through the favoritePrompts array until you find a match to the faveID 
      int counter=0; 
      for (id element in self.sharedFaveMan.favoritePrompts) { 
       NSNumber *valueForID = [element valueForKey:@"id"]; 

       if([valueForID isEqualToNumber:self.sharedFaveMan.theFaveID]){ 
        break; 
       } 
       counter ++; 
      } 


      // update the pieces of the prompt 
      [[self.sharedFaveMan.favoritePrompts objectAtIndex:counter] setObject:self.sharedFaveMan.faveStoryText forKey:@"storyText"]; 

      // save it 
      [self saveFavorites]; 

      [[NSNotificationCenter defaultCenter] 
      postNotificationName:@"updateTheTable" 
      object:self]; 

      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Success!" 
                  message:@"Favorite Updated!" 
                  delegate:self 
                cancelButtonTitle:nil 
                otherButtonTitles:@"OK",nil]; 

      //play a sound 
      [self createSoundID: @"ticktock.aiff"]; 

      //set the tag 
      [alert setTag:UPDATE_COMPLETE]; 

      // Display the alert to the user 
      [alert show]; 

     } 
    } 
    else if (buttonIndex == 0) 
    { 
     NSLog(@"%ld",(long)alertView.tag); 

     if(alertView.tag==SAVE_FAVE) 
     { 
      // they canceled the save 

     } 
     else if (alertView.tag==UPDATE_COMPLETE) 
     { 
      NSLog(@"Hit that"); 
      [[NSNotificationCenter defaultCenter] 
      postNotificationName:@"dismissedDialogNotification" 
      object:self]; 
     } 
    } 

} 

-(BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView 
{ 
    UITextField *textField = [alertView textFieldAtIndex:0]; 
    if (textField && [textField.text length] == 0) 
    { 
     return NO; 
    } 
    return YES; 
} 

Любые идеи?

+1

Честно говоря, когда дело доходит до оповещения, меньше больше. Я бы отказался от сохраненного предупреждения о предупреждении и только показал предупреждение о сбое - и только если пользователь может что-то сделать, например, подключиться к Интернету. - потому что они назойливы и боль. Apple также советует не показывать успех как предупреждение. Если вы действительно хотите показать успех, запустите цвет над фоном или что-то быстрое и ненавязчивое, что не требует взаимодействия. Поскольку клавиатура подходит только для второй, это также должно устранить вашу проблему. –

+0

Ну, я должен сказать, что это было удивительное предложение. Это проще всего сделать с программированием, и это тоже приятно для пользовательского интерфейса. Спасибо! –

ответ

0

Вот код

- (void)textViewDidEndEditing:(UITextView *)textView { 
    [textView resignFirstResponder]; 
} 

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { 
    if ([text isEqualToString:@"\n"]) {  
     [textView resignFirstResponder]; 
     // Return FALSE so that the final '\n' character doesn't get added 
     return NO; 
    } 
    // For any other character return TRUE so that the text gets added to the view 
    return YES; 
} 

-(BOOL)textViewShouldEndEditing:(UITextView *)textView { 
    [textView resignFirstResponder]; 
    return true; 
} 

и оповещения о методе в начале добавить эту строку кода

[self.view endEditing:YES]; 
Смежные вопросы