-1

我对 iOS 开发有点陌生,现在正在研究一些简单的 UI 相关的东西。我有一个UIAlertView我正在使用的一个,允许用户输入一些文本,带有简单的取消和确定按钮。如果文本字段为空白,则应禁用 OK 按钮。

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

-(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 做事方式的事情吗?有一个更好的方法吗?我是否应该忽略 的clearsOnBeginEditing属性UITextField,并在显示之前手动清除 Text 属性UIAlertView

4

2 回答 2

1

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

[[textEntryBox textFieldAtIndex:0] setDelegate:self]

并实现此方法:

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

我还有一个 UIAlertView 和一个 textField 来填写我的应用程序,它对我有用

于 2013-06-28T14:40:49.417 回答
0

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

于 2013-06-28T15:06:58.507 回答