Intereting Posts
Место расположения позвоночника (по 2 страницы за раз) в стиле прокрутки UIPageViewController Как вернуться из типа «частичного завитка» Текст UITextField растягивается при анимации ширины Может ли приложение Apple Watch иметь несколько взглядов? Почему сущность нуждается в обратном? iOS – Автоматический подсчет ссылок (ARC) против ручного сохранения-освобождения (MRR) Xcode 6.3 замерзает более 2 минут при наборе объектного кода на C Игровой центр в iOs – указание конфигурации для вашего матча Как отобразить изображение в форме алмаза в iOS? Неустранимая обработчик ошибок в приложении iOS Xcode 4.4 меняется на локализацию – как я НЕ локализую основную раскадровку? jsoncpp работает медленно после обновления цели развертывания iOS с 6.0 до 7.0 Как правильно рассчитать cornerRadius в зависимости от рамки кнопки Совместное использование диалога facebook с использованием UIImage как @ "picture" Расчет скорости сети в iOS. Время в оба конца с меньшим количеством данных не будет информировать о точной скорости сети

Включить кнопку в UIAlertView при вводе текста – несколько предупреждений

В моем приложении, когда пользователь нажимает кнопку сохранения на панели инструментов, пользователь затем запрашивает через UIAlertView, каким образом они хотели бы сохранить свою текущую работу, выбрав либо сохранить как изображение, либо сохранить в качестве воспроизведения. Когда пользователь выбирает сохранение в качестве воспроизведения, он затем запрашивается со вторым UIAlertView, который также имеет текстовое поле для ввода имени для воспроизведения. То, что я пытаюсь достичь, заключается в том, что когда текст не вводится, кнопка «Ok» отключена, и когда длина введенного текста равна 1 или более, тогда файл может быть сохранен (с помощью архиватора это работает правильно, поэтому это не isue), а затем кнопка Ok. Ниже приведен код, который показывает два вида предупреждений, а также то, что происходит, когда выбраны разные элементы из представлений.

- (IBAction)selectSaveType { UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"" message:@"Please Select an Option." delegate:self cancelButtonTitle:@"Save Play" otherButtonTitles:@"Save to Photos", nil]; [message show]; } - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { NSString *title = [alertView buttonTitleAtIndex:buttonIndex]; if([title isEqualToString:@"Save Play"]) { NSLog(@"Save Play was selected."); [self GetFileName]; } else if([title isEqualToString:@"Save to Photos"]) { NSLog(@"Save To Photos was selected."); //here is where we need to find how to call saveDrawing. [self saveDrawing]; } else if([title isEqualToString:@"Ok"]) { NSLog(@"OK selected"); UITextField *fName= [alertView textFieldAtIndex:0]; NSString *NameFile = fName.text; [self savePlay:NameFile]; } } -(void)savePlay:(NSMutableString *)fileName{ //code here to save via archive. NSArray *pathforsave = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentDirectory = [pathforsave objectAtIndex:0]; //here we need to add the file extension onto the file name before we add the name to the path [fileName appendString:@".hmat"]; NSString *strFile = [documentDirectory stringByAppendingPathComponent:fileName]; [NSKeyedArchiver archiveRootObject:matView.drawables toFile:strFile]; } 

Я пытаюсь использовать следующий код ниже, чтобы справиться с этим, но когда запускается первый UIAlertView (который запрашивает выбор пьесы – нет текстового поля) – тогда функция ниже запускается и сбой приложения, поскольку нет текстовые поля в первом представлении предупреждения.

 - (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView { NSString *inputText = [[alertView textFieldAtIndex:0] text]; if( [inputText length] >= 1 ) { return YES; } else { return NO; } } 

alertViewShouldEnableFirstOtherButton ударяется, когда срабатывает первое предупреждение, а затем мое приложение падает в симуляторе. Кто-нибудь видит, почему это произойдет? Две вещи, которые я не настолько уверен в

Один – почему дескриптор кнопки «Ok» во втором представлении оповещения, чтобы назвать воспроизведение, обрабатывается в том же блоке, где обрабатываются другие кнопки. Поскольку его отдельный вид предупреждения не должен быть в его собственном блоке?

Два – почему alertViewShouldEnableFirstOtherButton попадает, когда он еще не дошел до второго представления предупреждения, он вызывается и запускается с первым представлением предупреждения, что приводит к сбою приложения.

Спасибо за вашу помощь, я новичок в объекте C.

Методы делегата для просмотра предупреждений будут вызваны для любого представления предупреждения, которое вы представляете. При этом этот код выйдет из textFieldAtIndex:0 потому что textFieldAtIndex:0 не существует в виде простого предупреждения. Чтобы решить эту проблему, вам нужно добавить инструкцию if к методу делегата, определяя, какое предупреждение вызвало действие.

Изменить: больше не идентифицирует оповещение по имени. Код теперь проверяет стиль отправителя делегатов.

  - (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView { if (alertView.alertViewStyle == UIAlertViewStylePlainTextInput) { if([[[alertView textFieldAtIndex:0] text] length] >= 1 ) { return YES; } else { return NO; } }else{ return YES; } }