【问题标题】:UIAlertView textfield capture onchangeUIAlertView 文本字段捕获 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。有关如何完成的示例,请参阅此答案:stackoverflow.com/a/8994609/2263561

标签: objective-c ios uitextfield uialertview


【解决方案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 参考资料。
  • 还有一件事......当你不需要这个观察者时,只需删除它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
相关资源
最近更新 更多