Так что это происходит.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;
}
Любые идеи?
Честно говоря, когда дело доходит до оповещения, меньше больше. Я бы отказался от сохраненного предупреждения о предупреждении и только показал предупреждение о сбое - и только если пользователь может что-то сделать, например, подключиться к Интернету. - потому что они назойливы и боль. Apple также советует не показывать успех как предупреждение. Если вы действительно хотите показать успех, запустите цвет над фоном или что-то быстрое и ненавязчивое, что не требует взаимодействия. Поскольку клавиатура подходит только для второй, это также должно устранить вашу проблему. –
Ну, я должен сказать, что это было удивительное предложение. Это проще всего сделать с программированием, и это тоже приятно для пользовательского интерфейса. Спасибо! –