Intereting Posts
Как я могу отправить запрос от приложения ios 5 на сервер, который находится в локальной сети, а приложение находится в фоновом режиме? Удалить значения NSNull в генерируемом KVC NSMutableArray Как увеличить масштаб и уменьшить масштаб MKCircle в MKMapView на одной и той же кнопке в ios? Безопасно ли сохранять постоянные данные в виде txt-файла для CoreData? Проверить сертификат P12 для VPN-коннекции Отобразить номер NSNumber в ярлыке Разница между двумя способами итерации в Objective C? UITableViewCell BackgroundImage для ВСЕХ ячеек Приложение вылетает при нажатии кнопки присвоение изображения uiimageview в ячейке таблицы «Hijack» общесистемные HTTP-ссылки на OSX и в идеале iOS и открытое собственное приложение Повторное использование UIAlertController с NSObject Расшифровка подписей на платформу на стороне сервера для  Pay Анимационный объект 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; } }