我对iOS开发有点陌生,现在正在做一些与UI相关的简单工作。我有一个UIAlertView
,我曾经使用它来允许用户通过简单的"取消"one_answers"确定"按钮输入一些文本。如果文本字段为空,则应禁用"确定"按钮。
我在UIAlertViewDelegate
中添加了alertViewShouldEnableFirstOtherButton函数,因此当没有文本时,OK按钮将禁用,并且我还将UIAlertView
的UITextField
设置为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的自然做事方式?有更好的方法吗?我应该忽略UITextField
的clearsOnBeginEditing
属性,并在显示UIAlertView
之前手动清除Text属性吗?
尝试将文本字段委托设置为自身
[[textEntryBox textFieldAtIndex:0] setDelegate:self]
并实现这种方法:
-(void)textFieldDidBeginEditing:(UITextField *)textField
{
[textField setText:@""];
}
我还有一个UIAlertView,其中有一个textField要在我的应用程序中填写,它适用于我的
使用警报视图可能有点过分。如果您使用主细节范式,只需推送一个新的视图控制器,就可以在其中输入您的值,这可能会更容易。