Как вы форматируете более двух кнопок внутри UIAlertView с помощью стиля UIAlertStylePlainTextInput?

Я добавил UIAlertView в мое приложение, которое захватывает ввод пользователя, но я не уверен, как добавить третью кнопку. В идеале три кнопки будут поперек оповещения горизонтально или два будут выше кнопки "отменить". Ниже приведен фрагмент кода, который я использую для добавления UIAlertView.

- (********)initiateSave{
 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Archive" 
 message:@"Enter a name to save this as:" 
 delegate:self 
 cancelButtonTitle:@"Cancel" 
 otherButtonTitles:@"Save Session",@"Save",nil];
 alert.alertViewStyle = UIAlertViewStylePlainTextInput;
 UITextField * alertTextField = [alert textFieldAtIndex:0];
 alertTextField.keyboardType = UIKeyboardTypeDefault;
 alertTextField.placeholder = @"eg. My awesome file...";
 alert.tag = 1;
 [alert show];
 [alert release];
 self.name = [[alert textFieldAtIndex:0]text];
}

6 ответов

Apple действительно не хочет, чтобы вы возились с UIAlertView. Если способ, которым он естественным образом формирует себя, не отвечает вашим потребностям, подумайте о том, чтобы вместо этого отобразить пользовательский представленный ( "модальный" ) вид.


Это, безусловно, может быть достигнуто, прежде всего вам нужно настроить что-то вроде этого.

// Create Alert
UIAlertView* av = [UIAlertView new];
av.title = @"Find";
// Add Buttons
[av addButtonWithTitle:@"Cancel"];
[av addButtonWithTitle:@"Find & Bring"];
[av addButtonWithTitle:@"Find & Go"];
[av addButtonWithTitle:@"Go to Next"];
// Make Space for Text View
av.message = @"\n";
// Have Alert View create its view heirarchy, set its frame and begin bounce animation
[av show];
// Adjust the frame
CGRect frame = av.frame;
frame.origin.y -= 100.0f;
av.frame = frame;
// Add Text Field
UITextField* text = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 45.0, 245.0, 25.0)];
text.borderStyle = UITextBorderStyleRoundedRect;
[av addSubview:text];
[text becomeFirstResponder];

ЦЕНА ОТ... qaru.site/questions/589913/...

Затем вам нужно оживить перемещение UIAlertView вверх при вызове клавиатуры... что-то вроде этого...

-(void)keyboardWillShow: (id) notification {
if(showAlert==YES)
{
 [UIView beginAnimations:nil context:NULL];
 [UIView setAnimationDuration:0.3];
 [createNewAlert setTransform:CGAffineTransformMakeTranslation(0,-60)];
 [createNewAlert show];
 [UIView commitAnimations];
}
}
-(void)keyboardWillHide: (id) notification {
if(showAlert==YES) 
{
 [UIView beginAnimations:nil context:NULL];
 [UIView setAnimationDuration:0.3];
 [createNewAlert setTransform:CGAffineTransformMakeTranslation(0,+60)];
 [UIView commitAnimations];
}
}

QUOTED FROM... qaru.site/questions/589915/...

Конечно, вы можете найти дополнительную информацию о пользовательских UIAlertViews в следующем примере кода Apple! https://developer.apple.com/library/ios/#samplecode/UICatalog/Introduction/Intro.html

Удачи!!!!


Это прекрасно работает для меня. После того, как я показал много нитей, я нашел решение

UIAlertView* getWebUrl = [[UIAlertView alloc] initWithTitle:@"Enter URL" 
 message:nil 
 delegate:self 
 cancelButtonTitle:@"Cancel" 
 otherButtonTitles:@"Save", 
 @"Save Url", nil];
getWebUrl.transform=CGAffineTransformMakeScale(1.0, 0.75);
getWebUrl.alertViewStyle=UIAlertViewStylePlainTextInput;
[getWebUrl show];

и выровнять кнопки и текстовое поле после текущего предупреждения

-(void)willPresentAlertView:(UIAlertView *)alertView {
 for (UIView *view in alertView.subviews) {
 if ([view isKindOfClass:[UITextField class]]||
 [view isKindOfClass:[******** class]] || view.frame.size.height==31) {
 CGRect rect=view.frame;
 rect.origin.y += 65;
 view.frame = rect;
 }
 }
}


Это несколько сложно, Вот решение для этого. В строке сообщения вам нужно использовать \n, чтобы увеличить высоту UIAlertView.

- (********)initiateSave{
 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Archive" 
 message:@"\n\n\n\n\n" // Trick to increase the height
 delegate:self 
 cancelButtonTitle:@"Cancel" 
 otherButtonTitles:@"Save Session",@"Save",nil];
 alert.alertViewStyle = UIAlertViewStylePlainTextInput;
After increasing the height of Alert, now you can add a label to set the message in the label : "Enter a name to save this as:" at appropriate position.
[alert addSubView: messageLbl];
 UITextField * alertTextField = [alert textFieldAtIndex:0];
 alertTextField.keyboardType = UIKeyboardTypeDefault;
 alertTextField.placeholder = @"eg. My awesome file...";
 alert.tag = 1;
 [alert show];
 [alert release];
 self.name = [[alert textFieldAtIndex:0]text];
}


Я не думаю, что вы можете вручную изменить размер UIAlertView, но трюк, который я использую для включения ***********************, - это использовать "/n" в строке сообщения, чтобы увеличить "сообщение" (одна дополнительная строка на каждый)/n "), что делает достаточно места для всего остального.


Вот, немного поздно, но должен сделать трюк. (Работайте со мной). Создать UIAlertView

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"TITLE"
 message:@"BODY"
 delegate:self
 cancelButtonTitle:@"CANCEL"
 otherButtonTitles:@"OK",@"SEARCH",nil];
 alert.tag = kAlertTag;
 alert.alertViewStyle = UIAlertViewStylePlainTextInput;
 UITextField *alertTextField = [alert textFieldAtIndex:0];
 alertTextField.keyboardType = UIKeyboardTypeDefault;
 alertTextField.placeholder = @"ENTER STH";
 [alert show];
 [alert release];

И реализовать метод делегирования.

-(void)willPresentAlertView:(UIAlertView *)alertView {
 if (alertView.tag == kAlertTag) {
 [alertView setFrame:CGRectMake(17, 30, 286, 188)];
 NSArray *subviewArray = [alertView subviews];
 UILabel *messageLB = (UILabel *)[subviewArray objectAtIndex:2];
 [messageLB setFrame:CGRectMake(10, 46, 260, 20)];
 ******** *cancelBT = (******** *)[subviewArray objectAtIndex:3];
 [cancelBT setFrame:CGRectMake(10, 130, 100, 42)];
 ******** *okBT = (******** *)[subviewArray objectAtIndex:4];
 [okBT setFrame:CGRectMake(194, 130, 80, 42)];
 ******** *searchBT = (******** *)[subviewArray objectAtIndex:5];
 [searchBT setFrame:CGRectMake(112, 130, 80, 42)];
 UITextField *plateTF = (UITextField *)[subviewArray objectAtIndex:6];
 [plateTF setFrame:CGRectMake(10, 80, 266, 50)];
 UITextField *placeTF = (UITextField *)[subviewArray objectAtIndex:7];
 [placeTF setFrame:CGRectMake(15, 70, 256, 50)];
 }
}

FYI [subviewArray objectAtIndex: 1] для заголовка alertview.

licensed under cc by-sa 3.0 with attribution.