带有一个文本字段的 UIAlertView(用于登录目的)

Posted

技术标签:

【中文标题】带有一个文本字段的 UIAlertView(用于登录目的)【英文标题】:UIAlertView with one text field (for login purpose) 【发布时间】:2014-01-04 07:54:14 【问题描述】:

当我将tableView 向下拉时,alertView 应该会出现一个登录文本字段。 警报必须来,但不能选择 textField。 一旦我点击这个textField,就会出现键盘。

为此,我正在使用此代码:

- (void)toggleCells:(UIRefreshControl*)refreshControl

    message = [[UIAlertView alloc] initWithTitle:@"Create a new list"
                                                      message:@""
                                                     delegate:self
                                            cancelButtonTitle:@"Cancel"
                                            otherButtonTitles:@"OK", nil];
    [message setAlertViewStyle:UIAlertViewStylePlainTextInput];
    [message setTag:1001];
    //[message textFieldAtIndex:0].delegate = self;

    [refreshControl beginRefreshing];
    [message show];
    [refreshControl endRefreshing];
    //...

【问题讨论】:

所以...textField 在显示alertView 后立即被选中。这是你的问题吗?还有其他问题吗?一个快速修复可以是:[[message textFieldAtIndex:0] resignFirstResponder];(但是,是的,这种技术很烂) 我曾经这样使用过,但是第一个键盘出现了,然后在它隐藏之后......我不想这样出现......第一个警报必须出现在视图的中心......当我选择警报视图上的文本字段,然后警报必须向上移动..然后键盘必须出现... 【参考方案1】:

尝试:(不是很好,但可以快速修复

message = [[UIAlertView alloc] initWithTitle:@"Create a new list"
                                     message:nil
                                    delegate:self
                           cancelButtonTitle:@"Cancel"
                           otherButtonTitles:@"OK", nil];

[message setAlertViewStyle:UIAlertViewStylePlainTextInput];
[message setTag:1001];
[[message textFieldAtIndex:0] setDelegate:self]; //you'll surely need it later

[message show];

[[message textFieldAtIndex:0] resignFirstResponder]; //after showing the alertView

注意:上面的方法不是很好。


替代方法:

注意:在.h中声明“BOOL skipAlertTextField;

- (void)toggleCells:(UIRefreshControl*)refreshControl 
    //...
    message = [[UIAlertView alloc] initWithTitle:@"Create a new list"
                                         message:nil
                                        delegate:self
                               cancelButtonTitle:@"Cancel"
                               otherButtonTitles:@"OK", nil];

    [message setAlertViewStyle:UIAlertViewStylePlainTextInput];
    [message setTag:1001];
    [[message textFieldAtIndex:0] setDelegate:self];

    skipAlertTextField = YES;  //important
    [message show];
    //...


- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
    if(textField.tag == 1001 && skipAlertTextField) 
        skipAlertTextField = NO;
        return NO;
    

    return YES;

【讨论】:

ok yar..工作正常。但是 alertview 没有出现在中心..它出现时显示在顶部.. @gajendra:嗯...alertView 没有居中。似乎是个问题。无论如何... 更新答案 使用替代技术 @gajendra :当然,我会检查,但这个答案有帮助吗?【参考方案2】:

试试这个

UIAlertView *av = [[UIAlertView alloc]initWithTitle:@"SayWhat" message:@"Please enter Email address" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
    av.alertViewStyle = UIAlertViewStylePlainTextInput;
    [av setAlertViewStyle:UIAlertViewStylePlainTextInput];
    [[av textFieldAtIndex:0] setPlaceholder:@"Email address"];
    [[av textFieldAtIndex:0] setDelegate:self];

[av show];
[[av textFieldAtIndex:0] resignFirstResponder];

【讨论】:

当警报视图出现时,文本字段被平行选中,键盘也出现了..我不想这样..首先警报视图必须来。一旦我选择了 uialertview 上的文本字段,那么键盘必须出现..

以上是关于带有一个文本字段的 UIAlertView(用于登录目的)的主要内容,如果未能解决你的问题,请参考以下文章

带有文本字段的 iphone alertview

UIAlertView 文本字段捕获 onchange

用于自定义视图的 iOS7 UIAlertView 样式对话框

带有更多文本字段的 UIAlertViewStyleLoginAndPasswordInput?

UIAlertView 处理文本字段

UIAlertView 错误超出文本字段数组的范围但未使用文本字段