2009-05-07 2 views
7

Возможно ли показать предупреждение с текстовым полем внутри, как приложение AppStore. Он запрашивает пароль в таком диалоговом окне. Я видел по крайней мере пару других сторонних приложений, использующих его. Это частный API?Отображение alertview с текстовым полем в iPhone

ответ

9

Да, это недокументировано. Чтобы добавить текстовое поле в UIAlertView, используйте метод addTextFieldWithValue: label:. Вы вызываете текст по умолчанию в качестве первого аргумента и текст, который отображается в пустом поле как второй. Сделав это, вы можете получить доступ к полю с помощью textFieldAtIndex: n - см. Ниже.

UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Who are you?"  
         message:@"Give your full name" 
         delegate:self cancelButtonTitle:@"Cancel" 
         otherButtonTitles:@"OK", nil]; 
[alert addTextFieldWithValue:@""label:@"Name"]; 

// Customise name field 
UITextField* name = [alert textFieldAtIndex:0]; 
name.clearButtonMode = UITextFieldViewModeWhileEditing; 
name.keyboardType = UIKeyboardTypeAlphabet; 
name.keyboardAppearance = UIKeyboardAppearanceAlert; 
[alert show]; 

Следующий фрагмент кода показывает, как получить значение в поле Имя:

NSLog("Name is %@", [[modalView textFieldAtIndex:0] text]); 
+5

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

+0

Согласен - это было написано давно. Должен ли я удалить ответ. –

+0

@JaneSales: Я бы не удалил ответ, но я определенно добавлю большую заметную оговорку в верхней части сообщения. – FreeAsInBeer

3

Джефф Lamarche опубликовал некоторые sample code on his blog сделать именно это. Форматирование выглядело немного неудобно, когда я это пробовал, но это, вероятно, хорошая отправная точка.

16

Это «Apple Approved» способ сделать это из Махадуна в Тарину. Я получил его от его комментарий на этой странице: http://iosdevelopertips.com/undocumented/alert-with-textfields.html

// Ask for Username and password. 
UIAlertView *alertview = [[UIAlertView alloc] initWithTitle:@"Twitter Details!" message:@"\n \n \n" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil]; 

// Adds a username Field 
UITextField *utextfield = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 45.0, 260.0, 25.0)]; 
utextfield.placeholder = @"Username"; 
[utextfield setBackgroundColor:[UIColor whiteColor]]; 
[alertview addSubview:utextfield]; 

// Adds a password Field 
UITextField *ptextfield = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 80.0, 260.0, 25.0)]; 
ptextfield.placeholder = @"Password"; 
[ptextfield setSecureTextEntry:YES]; 

[ptextfield setBackgroundColor:[UIColor whiteColor]]; [alertview addSubview:ptextfield]; 
// Move a little to show up the keyboard 
CGAffineTransform transform = CGAffineTransformMakeTranslation(0.0, 80.0); 
[alertview setTransform:transform]; 

// Show alert on screen. 
[alertview show]; 
[alertview release]; 

//... 
// Don't forget to release these after getting their values 
[utextfield release]; 
[ptextfield release]; 

И, наконец, чтобы получить текст обратно

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
    if (buttonIndex == 0) 
     return; //Cancel 

    UITextField *field = (UITextField *)[[alertView subviews] lastObject]; 
    NSLog (@"%@", field.text); 
} 
+0

Я лично удалю преобразование и добавлю [utextfield getFirstResponder] после того, как вы отпустите alertview, чтобы клавиатура автоматически всплывала. – AlBeebe

5

Это действительно старые вопросы с очень старыми ответами.

Это пример того, как я получаю UITextField в UIAlertView начиная с прошивкой 5:

UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"New List Name" message:@"" delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"Continue", nil]; 

    message.alertViewStyle = UIAlertViewStylePlainTextInput; 
    self.alertTextField = [message textFieldAtIndex:0]; 
    self.alertTextField.keyboardType = UIKeyboardTypeAlphabet; 
    message.delegate = self; 
    [message show]; 
    [self.alertTextField becomeFirstResponder]; 

где alertTextField был создан как это:

@property (nonatomic, strong) UITextField *alertTextField; 
Смежные вопросы