UIAlertView 文本字段捕获 onchange

Posted

技术标签:

【中文标题】UIAlertView 文本字段捕获 onchange【英文标题】:UIAlertView textfield capture onchange 【发布时间】:2012-11-07 11:01:29 【问题描述】:

我正在尝试实现自定义 AlertView。

这个想法是让 alertview 带有文本字段和取消按钮。

我不能做的是实时检查文本字段中输入的字符。我知道我可以使用– alertViewShouldEnableFirstOtherButton: 做到这一点,但我不想要另一个按钮。我希望在没有按钮的情况下做同样的事情。

android 中,您可以将侦听器添加到文本字段 onchange。

尝试使用此 uitextfield 函数来执行此操作,但它没有被实时调用,或者我可能以错误的方式使用它。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

    textField = [alert textFieldAtIndex:0];
    if ([textField.text length] == 0)
    
        NSLog(@"Hello");
        return NO;
    
    return NO;

那么如何正确地做到这一点呢?

【问题讨论】:

你设置了文本域委托吗? 不.. 我应该如何以及在哪里做呢?抱歉,我还不能清楚地理解delegate。 看看我的回答就好了... 仅供参考,ios5 将 UITextField 功能添加到 UIAlertView。有关如何完成的示例,请参阅此答案:***.com/a/8994609/2263561 【参考方案1】:

试试这个

    UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"New List Item", @"new_list_dialog")
                                                          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.delegate = self;
    [myTextField setBackgroundColor:[UIColor whiteColor]];
    [myAlertView addSubview:myTextField];
    [myAlertView show];
    [myAlertView release];

和文本字段方法

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    NSLog(@" %@", [textField.text stringByReplacingCharactersInRange:range withString:string]);
    return YES;

【讨论】:

对不起,它说委托方法中的类型不兼容,从 UItextfielddelegate 到 MYCLASSNAME。但是,感谢您抽出宝贵的时间查看此内容。王子已经用可行的解决方案回答了我的问题 很好,你找到了解决方案..但是这段代码工作得很好......我已经测试过了..可能你忘记在你的类 .h 文件中设置这一行 UIViewController . 你是对的,我没有这样做。您的解决方案也运行良好。但是,我将接受 Prince 解决方案,因为它之前已发布。感谢您抽出宝贵时间提供帮助! +1 因为我认为在这种特殊情况下委托模式更好。我更改了 NSLog,因此它输出了在您离开该方法后将出现的文本。通常这比在不先更改字符的情况下检查“旧”字符串更有意义。 您能解释一下为什么这个解决方案更好吗?【参考方案2】:

您可以为UITextFieldTextDidChangeNotification 添加观察者,该观察者将在text changestextfield 中发布。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(controlTextDidChange:)
   name:UITextFieldTextDidChangeNotification object:[alert textField]];

选择器如下:

- (void)controlTextDidChange:(NSNotification *)notification 

    if ([notification object] == [alert textField]) 
    
      // [alert textField] has changed
    

编辑removeObserverfinish 正在做

[[NSNotificationCenter defaultCenter] removeObserver:UITextFieldTextDidChangeNotification];

【讨论】:

伟大的。它按预期工作。非常感谢你。我想我得看看 NotificationCentre 参考资料。 还有一件事......当你不需要这个观察者时,只需删除它。

以上是关于UIAlertView 文本字段捕获 onchange的主要内容,如果未能解决你的问题,请参考以下文章

UIAlertView 处理文本字段

在 UIAlertView 试图查看两个文本字段。它显示文本字段数组iOS7的错误范围

带有两个文本字段和两个按钮的 UIAlertView

如何在 UIAlertview 中为文本字段设置货币格式

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

如何在 UIAlertView 的消息字段中添加多行文本