iphone alertview с текстовым полем

У меня есть UIAlertView с UITextField внутри. Я хочу ввести идентификатор почты и отправить его с помощью кнопки ok в UIAlertView, но UITextField в UIAlertView не отвечает. Пожалуйста, помогите мне.

спасибо


person Nipin P N    schedule 07.04.2011    source источник


Ответы (4)


Начиная с iOS 5 описанный выше подход больше не нужен. Просто установите для свойства alertViewStyle соответствующий стиль (UIAlertViewStyleSecureTextInput, UIAlertViewStylePlainTextInput или UIAlertViewStyleLoginAndPasswordInput).

Пример:

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Email" message:@"Enter your email:" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
alertView.alertViewStyle = UIAlertViewStylePlainTextInput;
[alertView show];

и вы можете получить ответ как

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    UITextField *emailTextField = [alertView textFieldAtIndex:0];
    NSLog(@"%@",emailTextField.text);
}
person xcoder    schedule 18.04.2012

UIAlertView с UITextField:

Использование:

NSString *title         = NSLocalizedString(@"Your Title","");
NSString *placeholder   = NSLocalizedString(@"Placeholder Text","");
NSString *message       = NSLocalizedString(@"A message to the user.","");
NSString *cancel        = NSLocalizedString(@"Cancel","");
NSString *okay          = NSLocalizedString(@"Continue","");

prompt = [[AlertPrompt alloc] initWithTitle:title 
                   placeholder:placeholder 
                       message:message 
                      delegate:self 
             cancelButtonTitle:cancel 
                 okButtonTitle:okay];
[prompt show];
[prompt release];

.h

#import <Foundation/Foundation.h>

@interface AlertPrompt : UIAlertView <UITextFieldDelegate>
{
    UITextField *textField;
    NSString *enteredText;
}
@property(nonatomic,retain) UITextField *textField;
@property (nonatomic, retain, readonly) NSString *enteredText;
- (id)initWithTitle:(NSString *)title placeholder:(NSString *)placeholder message:(NSString *)message delegate:(id)delegate 
  cancelButtonTitle:(NSString *)cancelButtonTitle okButtonTitle:(NSString *)okayButtonTitle;
@end

.m

#import ".h"

@implementation AlertPrompt

@synthesize textField;
@synthesize enteredText;

#pragma mark -
#pragma mark AlertPrompt Delegates

- (id)initWithTitle:(NSString *)title placeholder:(NSString *)placeholder message:(NSString *)message delegate:(id)delegate 
  cancelButtonTitle:(NSString *)cancelButtonTitle okButtonTitle:(NSString *)okayButtonTitle {

    if (self = [super initWithTitle:title message:message delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:okayButtonTitle, nil])
    {
        self.title      = title;
        self.message      = [NSString stringWithFormat:@"%@\n\n\n",message];
        self.delegate    = delegate;

        UITextField *theTextField = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 75.0f, 260.0, 30.0)]; 
        [theTextField setBackgroundColor:[UIColor clearColor]]; 
        theTextField.borderStyle = UITextBorderStyleRoundedRect;
        theTextField.textColor = [UIColor blackColor];
        theTextField.font = [UIFont systemFontOfSize:18.0];
        theTextField.autocapitalizationType = UITextAutocapitalizationTypeWords;
        theTextField.keyboardAppearance = UIKeyboardAppearanceAlert;
        theTextField.returnKeyType = UIReturnKeyDone;
        theTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
        theTextField.placeholder = placeholder;
        theTextField.delegate = self;
        [self insertSubview:theTextField atIndex:0];
        self.textField = theTextField;
        [theTextField release];
        CGAffineTransform translate = CGAffineTransformMakeTranslation(0, -10); 
        [self setTransform:translate];
    }
    return self;
}

- (void)show{
    [textField becomeFirstResponder];
    [super show];
}

- (NSString *)enteredText{
    return textField.text;
}

- (void)dealloc{
    [textField resignFirstResponder];
    [textField release];
    [super dealloc];
}
@end

Делегат:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{
    if([alertView.title isEqualToString:@"Your Title"])
    {    
        if(buttonIndex == 1)
        {
            /*  get the user iputted text  */
            NSString *inputValue = [(AlertPrompt *)alertView enteredText];
            NSLog(@"User Input: %@",inputValue);
        {
    }
}
person WrightsCS    schedule 07.04.2011
comment
Это очень пояснительный ответ +1 - person Sudhanshu; 07.04.2011
comment
+1, но разве использование текстового поля не является частным? Или хотя бы без документов? По крайней мере, так было в 3.x. - person Jordan; 07.04.2011
comment
@Jordan Нет, в этом примере нет ничего недокументированного. На самом деле у меня есть 4 приложения в iTunes App Store, которые используют этот кусок кода, и у меня не было проблем с одобрением. - person WrightsCS; 07.04.2011
comment
@WrightsCS - я не говорил, что это не работает или что это не будет одобрено. Только то, что это недокументировано. Это означает, что поведение может измениться в будущем. - person Jordan; 07.04.2011
comment
@ Джордан, нет, потенциального изменения поведения нет. Это все стандартные вещи. Что в этом примере может измениться в будущем? Я имею в виду, что с Apple у вас, скорее всего, что-то изменится, но вы готовы принять удары и обновить свой код. - person WrightsCS; 07.04.2011
comment
@WrightsCS - ОК, ОК ;) - В конце концов, вы добавляете что-то в UIView. Я понимаю. Я хотел сказать, что UIAlertView не был разработан для этого варианта использования. Но это спорный вопрос. Это работает, не беспокойтесь. Хорошего дня. Ваше здоровье. - person Jordan; 07.04.2011
comment
self.message = [NSString stringWithFormat:@%@\n\n\n, сообщение]; self.delegate = делегат; запросить сообщение члена, а не указать strctr или union, затем я получил незаявленную подсказку, много ошибок - person Nipin P N; 09.04.2011
comment
Это прекрасно работает в iOS 4, но в бета-версии iOS 5 текстовое поле отображается неправильно — у него нет рамки или фона, поэтому создается впечатление, что вы печатаете непосредственно в UIAlertView, а не внутри UITextField. Какие-либо предложения? - person Jason; 23.09.2011

UIAlertView *emailAlert=[[UIAlertView alloc]initWithTitle:@"Enter your Email-id" message:@"\n\n" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK",nil];
    emailTextField=[[UITextField alloc]initWithFrame:CGRectMake(12,45,260,25)];
    [emailTextField becomeFirstResponder];

    [emailTextField setBackgroundColor:[UIColor whiteColor]];
    emailTextField.clearButtonMode=UITextFieldViewModeWhileEditing;
        emailTextField.placeHolder=@"Email";
    [emailAlert addSubview:emailTextField];
    [emailAlert show];
    [emailAlert release];

Используйте методы делегатов UIAlertView при нажатии кнопки OK.

person anjum    schedule 19.04.2012

Быстрая версия:

var alert = UIAlertView(title: "PostActionTitle", message: "PostActionText", delegate: self, cancelButtonTitle:"PostActionDecline")
alert.alertViewStyle = UIAlertViewStyle.PlainTextInput
alert.addButtonWithTitle("PostActionAccept")
alert.show()
person Esqarrouth    schedule 20.01.2015