2013-04-20 3 views
0

я использовал следующий код для создания UIAlertView и добавить некоторые компоненты на нем, но результат на картинке: (((изображение находится здесь: http://i.stack.imgur.com/DTg02.png)UIAlertView отображает текстовые поля и кнопку

-(IBAction)login:(id)sender 
{ 
    UIAlertView *login = [[UIAlertView alloc]initWithTitle: @"Login first" 
                message:@"enter username and password please first" delegate:self cancelButtonTitle:@"cancel"otherButtonTitles:@"OK", nil]; 

k = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 70.0, 200.0, 25.0)]; //<< it also displays wrong without this line 
k.text = @""; 
k.backgroundColor = [UIColor whiteColor]; 
k.clearButtonMode= UITextFieldViewModeWhileEditing; 
k.keyboardType = UIKeyboardTypeAlphabet; 
k.keyboardAppearance = UIKeyboardAppearanceAlert; 

p = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 100.0, 200.0, 25.0)]; 
p.text = @""; 
p.backgroundColor = [UIColor whiteColor]; 
p.clearButtonMode = UITextFieldViewModeWhileEditing; 
p.keyboardType = UIKeyboardTypeAlphabet; 
p.keyboardAppearance = UIKeyboardAppearanceAlert; 

[login addSubview:k]; 
[login addSubview:p]; 
[login show]; 
} 
+0

вам нужно использовать UIPopoverController вместо UIAlertView –

+0

вы можете использовать customView для этого – crz

ответ

0

UIAlertView является нет мысли для дополнительного ввода текста Вы можете использовать вместо этого UIActionSheet, как это объясняется here

0

не идти на все обрывы Просто используйте следующий код:...

[login setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput]; 

И обрабатывать входные данные пользователя, используйте:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if([[alertView textFieldAtIndex:0].text isEqual:@"UserName"]&&[[alertView textFieldAtIndex:1].text isEqual:@"PassWord"]) 
    { 
     //do your stuff here 
     [adminLoginButton setTitle:@"Logout" forState:UIControlStateNormal]; 
     [adminLoginButton setImage:[UIImage imageNamed:@"Logout.png"] forState:UIControlStateNormal]; 
    } 
    else 
    { 
     UIAlertView *errorMessage = [[UIAlertView alloc]initWithTitle:@"Authentication Error" message:@"Input is wrong" delegate:self cancelButtonTitle:@"Okay" otherButtonTitles: nil]; 
     [errorMessage show]; 
    } 
} 
2

если вы хотите добавить несколько TextField и Multiple кнопку на UIAlertView затем следовать шаг:

шаг 1:

@interface ViewController()<UIAlertViewDelegate> 
{ 
    UITextField *textFieldOne,*textFieldTwo,*textFieldThird; 
} 

шаг 2:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"Multiple TextField" delegate:nil cancelButtonTitle:@"NO" otherButtonTitles:@"YES", nil]; 

    [alert addButtonWithTitle:@"CANCEL"]; 
    alert.delegate=self; 

    UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; 
    textFieldOne=[[UITextField alloc]initWithFrame:CGRectMake(5, 0, 150, 20)]; 
    [textFieldOne setPlaceholder:@"First Name"]; 
    [myView addSubview:textFieldOne]; 

    textFieldTwo=[[UITextField alloc]initWithFrame:CGRectMake(5,25, 150, 20)]; 
    [textFieldTwo setPlaceholder:@"Middle Name"]; 
    [myView addSubview:textFieldTwo]; 

    textFieldThird=[[UITextField alloc]initWithFrame:CGRectMake(5,50, 150, 20)]; 
    [textFieldThird setPlaceholder:@"Last Name"]; 
    [myView addSubview:textFieldThird]; 

    [alert setValue:myView forKey:@"accessoryView"]; 
    [alert show]; 

шаг 3:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    NSString *title = [alertView buttonTitleAtIndex:buttonIndex]; 

    if([title isEqualToString:@"YES"]) 
    { 
     NSLog(@"Button YES"); 
     NSLog(@"TextFiledOne Text = %@",textFieldOne.text); 
     NSLog(@"TextFiledTwo Text = %@",textFieldTwo.text); 
     NSLog(@"TextFiledThree Text = %@",textFieldThird.text); 
    } 
    else if([title isEqualToString:@"NO"]) 
    { 
     NSLog(@"Button NO"); 
    } 
    else 
    { 
     NSLog(@"Cancel is click"); 
    } 
} 
0

Там нет смысла добавлять к коду, который уже был добавлен здесь, как это достаточно хорошо уже и есть некоторые хорошие альтернативы данные. Я собираюсь рассказать вам, почему вы не должны добавлять свои собственные UITextField s в UIAlertView, используя addSubview:.

В основном Apple внесла класс UIAlertView, который будет использоваться as is, а иерархия представления для этого класса является частной.

подклассы Примечание

Класс UIAlertView предназначено для использования как есть и не поддерживают подклассы. Иерархия представления для этого класса является частной и ее нельзя изменять.

Подклассовое примечание от UIAlertView Apple documentation.

По сути это означает, что если вы используете метод addSubview: на UIAlertView тогда вы в суть изменения то, что Apple, как указано как частное и ваше приложение будет получить отклоненный от процесса в Apple App Review за правило 2.5.

2,5 приложения, использующие непубличных API, будут отклонены

Вы можете спросить себя, почему этот метод даже существуют, то для UIAlertView, конечно, потому что его там мы можем использовать его.Ну NO причина, потому что класс UIAlertView сам по себе является подклассом UIView, в котором объявлен метод addSubview:. К сожалению, нет причин, чтобы остановить экземпляр UIAlertView от фактического вызова этого метода. Итак, что Apple сделала, они переопределили метод addSubview:, и все, что он делает, возвращается. Таким образом, этот метод не делает ничего, и любые представления, которые вы передаете этому методу, никогда не будут добавлены, поскольку он никогда не вызывает [super addSubview:view];.

Так что, когда дело доходит до UIAlertView s есть две вещи, которые вы не должны делать и это:

  1. ПодклассUIAlertView как @interface MYAlertView : UIAlertView это подклассов и не допускается.

  2. Alter Просмотр иерархии как [alertView addSubview:view];

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

Следует также отметить, что если вы разрабатываете для iOS8 и выше, вы должны использовать UIAlertController, так как UIAlertView устарел.

Важен:

UIAlertView осуждается в прошивке 8. (Обратите внимание, что UIAlertViewDelegate также не рекомендуется.) Для того, чтобы создавать и управлять предупреждениями в прошивке 8, а затем, вместо того, чтобы использовать UIAlertController с preferredStyle из UIAlertControllerStyleAlert.

Таким образом, я либо использовал бы один из пользовательских классов, упомянутых в других ответах, либо перешел на использование UIAlertController, или если у вас есть время, чтобы создать собственное собственное предупреждение.

Я надеюсь, что это объяснение поможет вам разобраться UIAlertView.

Смежные вопросы