Добавление TextField в UIAlertView - PullRequest
21 голосов
/ 01 апреля 2012

Мне нужно добавить TextField к UIAlertView. Я понимаю, что яблоко препятствует такому подходу. Так есть ли какая-нибудь библиотека, которую я мог бы использовать, чтобы добавить TextField к UIAlertView подобному фрейму?

Ответы [ 9 ]

69 голосов
/ 01 апреля 2012

Для iOS5:

UIAlertView *av = [[UIAlertView alloc]initWithTitle:@"Title" message:@"Please enter someth" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
av.alertViewStyle = UIAlertViewStylePlainTextInput;
[av textFieldAtIndex:0].delegate = self;
[av show];

Кроме того, вам необходимо реализовать протоколы UITextFieldDelegate, UIAlertViewDelegate.

14 голосов
/ 01 апреля 2012

К сожалению, единственным официальным API для этого является iOS 5 и выше, это свойство называется alertViewStyle, для которого можно установить следующие параметры:

UIAlertViewStyleDefault
UIAlertViewStyleSecureTextInput
UIAlertViewStylePlainTextInput
UIAlertViewStyleLoginAndPasswordInput

UIAlertViewStylePlainTextInput быть тем, кем вы хотите.

Apple не одобряет неправильное использование иерархии представлений, как описано выше.

6 голосов
/ 01 апреля 2012

Я использую BlockAlertsAndActionSheets вместо компонентов Apple для AlertViews и ActionSheets, так как я предпочитаю блочный подход.Также содержит BlockTextPromptAlertView в источнике, который может быть тем, что вы хотите.Вы можете заменить изображения этого элемента управления, чтобы вернуть стиль Apple.

Проект на gitgub

Учебное пособие, с которого вы начинаете

Пример:

- (IBAction)newFolder:(id)sender {
    id selfDelegate = self;
    UITextField                 *textField;
    BlockTextPromptAlertView    *alert = [BlockTextPromptAlertView  promptWithTitle :@"New Folder"
                                                                    message         :@"Please enter the name of the new folder!"
                                                                    textField       :&textField];
    [alert setCancelButtonWithTitle:@"Cancel" block:nil];
    [alert addButtonWithTitle:@"Okay" block:^{
        [selfDelegate createFolder:textField.text];
    }];
    [alert show];
}

- (void)createFolder:(NSString*)folderName {
    // do stuff
}
4 голосов
/ 14 августа 2015

Начиная с iOS 8 UIAlertView устарела в пользу UIAlertController, что добавляет поддержку добавления UITextField с использованием метода:

- (void)addTextFieldWithConfigurationHandler:(void (^)(UITextField *textField))configurationHandler;

См. этот ответ для примера.

4 голосов
/ 01 апреля 2012

Попробуйте что-то вроде этого:

UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Title"
                                                 message:@"\n\n"
                                                delegate:self
                                       cancelButtonTitle:@"Cancel"
                                       otherButtonTitles:@"Save", nil] autorelease];
CGRect rect = {12, 60, 260, 25};
UITextField *dirField = [[[UITextField alloc] initWithFrame:rect] autorelease];
dirField.backgroundColor = [UIColor whiteColor];
[dirField becomeFirstResponder];
[alert addSubview:dirField];

[alert show];
3 голосов
/ 01 апреля 2012

Вы можете попробовать:

UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Your title here!" message:@"this gets covered" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
UITextField *myTextField = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 45.0, 260.0, 25.0)];
[myTextField setBackgroundColor:[UIColor whiteColor]];
[myAlertView addSubview:testTextField];
[myAlertView show];
[myAlertView release];

Перейдите по этой ссылке для подробностей.

1 голос
/ 27 января 2016

прежде всего Добавьте UIAlertViewDelegate в файл ViewController.h, например,

#import <UIKit/UIKit.h>

@interface UIViewController : UITableViewController<UIAlertViewDelegate>

@end

, а затем добавьте код ниже, где вы хотите предупредить отображение,

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title"
                                            message:@"Message"
                                           delegate:self
                                  cancelButtonTitle:@"Done"
                                  otherButtonTitles:nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
[alert show];

и его метод делегата, который возвращаеткакой ввод UItextField

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSLog(@"%@", [alertView textFieldAtIndex:0].text);
}
0 голосов
/ 19 сентября 2014

добавляя к ответу «Шмидта», код для ввода текста, введенного в UIAlertView, вставляется ниже (спасибо, Уэйн Хартман) Получение текста из UIAlertView )

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == 1) {
        self.userNumber = [alertView textFieldAtIndex:0].text;
        if (self.userNumber) {
            // user enetered value
            NSLog(@"self.userNumber: %@",self.userNumber);
        } else {
            NSLog(@"null");
        }

    }
}
0 голосов
/ 01 апреля 2012

см. Это ... http://iosdevelopertips.com/undocumented/alert-with-textfields.html это частный API, и если вы используете его для приложения в магазине приложений, он может быть отклонен, но это хорошо для развития предприятия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...