iOS UIAlertview清除文本并禁用“确定”



我对iOS开发有点陌生,现在正在做一些与UI相关的简单工作。我有一个UIAlertView,我曾经使用它来允许用户通过简单的"取消"one_answers"确定"按钮输入一些文本。如果文本字段为空,则应禁用"确定"按钮。

我在UIAlertViewDelegate中添加了alertViewShouldEnableFirstOtherButton函数,因此当没有文本时,OK按钮将禁用,并且我还将UIAlertViewUITextField设置为clearOnBeginEditing为true,因此每次显示警报时,以前的文本都将消失。这些东西中的每一个都能完美地发挥作用。不幸的是,AlertView似乎正在检查是否在清除文本字段之前启用"确定"按钮,所以当它们放在一起时,它就会启用。下面应该是关于复制所需的最小代码。

-(void)viewDidLoad
{
    textEntryBox = [[UIAlertView alloc] initWithTitle:@"Name" message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
    [textEntryBox setAlertViewStyle:UIAlertViewStylePlainTextInput];
    [textEntryBox textFieldAtIndex:0].clearsOnBeginEditing = YES;
}
-(IBAction)functionTriggeredByOtherLogic
{
    [textEntryBox show];
}
-(BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView
{
    if(alertView == textEntryBox)
    {
        if([[alertView textFieldAtIndex:0].text length] > 0)
        {
            return YES;
        }
        else
        {
            return NO;
        }
    }
    return YES;
}

所以,最终,我的问题是:我在这里做的事情是否完全违背了iOS的自然做事方式?有更好的方法吗?我应该忽略UITextFieldclearsOnBeginEditing属性,并在显示UIAlertView之前手动清除Text属性吗?

尝试将文本字段委托设置为自身

[[textEntryBox textFieldAtIndex:0] setDelegate:self]

并实现这种方法:

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    [textField setText:@""];
}

我还有一个UIAlertView,其中有一个textField要在我的应用程序中填写,它适用于我的

使用警报视图可能有点过分。如果您使用主细节范式,只需推送一个新的视图控制器,就可以在其中输入您的值,这可能会更容易。

最新更新