如果所有文本字段都填写在 ios 中,则启用按钮
Posted
技术标签:
【中文标题】如果所有文本字段都填写在 ios 中,则启用按钮【英文标题】:To enable button if all the textfields are filled in ios 【发布时间】:2014-08-09 06:05:55 【问题描述】:我在 ios 中设计了一个注册表单,其中包含四个 UITextField
s 和一个 UIButton
。默认情况下,我已将按钮的 enabled
属性设置为 NO
。现在我只想在所有四个文本字段都填满时启用该按钮。你能帮我解决这个问题,因为我是 ios 的新手,并且遇到了这个问题。
【问题讨论】:
更好的方法是检查按钮单击是否所有四个文本字段都已填充。如果是,则允许您采取行动,如果不是,则针对特定文本字段发出警报。 如果您需要,可以为此提供代码。 【参考方案1】:更好的方法是使用didChange
方法,如UITextViewDelegate
方法,但我们知道UITextFieldDelegate
没有didChange
方法。您可以手动添加行为。您可以使用 shouldChangeCharactersInRange:
方法,但我个人建议不要覆盖方法,除非您绝对必须这样做。
您可以使用以下方式添加行为:
[myTextField1 addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];//And so on for all your text fields
并且在目标方法中:
- (void)textFieldDidChange:(UITextField*)textField
if (myTextField1.text.length > 0 && myTextField2.text.length > 0 && myTextField3.text.length > 0 && myTextField4.text.length > 0)
myButton.enabled = YES;
else
myButton.enabled = NO;
编辑: 此外,如果您想确保它们仅在用户输入有效文本而不是空格的情况下启用,您可以使用以下内容获取修剪后的文本,检查修剪后的文本是否有长度> 0:
NSUInteger textLength = [myString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
【讨论】:
这会给系统带来很大压力吗? @milesper 不是很费力的方式。【参考方案2】:在您的 .h 文件中
@interface YourViewController : UIViewController <UITextFieldDelegate>
在您的 .m 文件中
在 viewDidLoad 中写这个
self.btnSignUp.enable=NO; //button is disable by default
self.textField1.delegate=self; // set delegate of text field
self.textField2.delegate=self;
self.textField3.delegate=self;
self.textField4.delegate=self;
编写此文本字段的委托方法
-(void)textFieldDidEndEditing:(UITextField *)textField
if ([textField1.text length]>0 && [textField2.text length]>0 && [textField3.text length]>0 && [textField4.text length]>0) // check if all the textfields are filled
self.btnSignUp.enabled:YES; // enable button here
【讨论】:
对代码的解释将不胜感激。另外,不要将点表示法与括号表示法混合使用。 你能给出一个合适的理由吗?为什么任何人都不应该将点表示法与括号表示法混合使用。这对我和其他用户都有帮助。谢谢。 您的代码会显得丑陋和笨拙,并且不会遵循传统的编码约定。这将很危险并且容易出现语法错误。【参考方案3】:我知道这是比较老的,但我想提出另一个想法。我刚刚使用 UITextFieldTextDidChangeNotification 实现了这个。
注册通知:
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("textFieldDidChange:"), name: "UITextFieldTextDidChangeNotification", object: nil)
添加处理通知的方法。 仅当所有文本字段都不为空时,才将按钮的 enabled 属性设置为 true。 对于 20 个文本字段,这不是一个很好的解决方案,但对于 2 - 5 个就可以了。
func textFieldDidChange(notification: NSNotification)
self.button.enabled = self.firstField.text != "" && self.secondField.text != ""
每次文本字段的内容更改时都会调用该方法,因此按钮会实时响应。
【讨论】:
他们也应该删除viewWillDisappear
中的通知。【参考方案4】:
我会以稍微不同的方式处理这个问题。
我不会经历启用/禁用UIButton
的麻烦,而是让UIButton
一直启用,并让它的目标操作方法决定要做什么。
例子:
//Sign Up button method
-(IBAction)btnSignUp:(UIButton *)sender
//create a local array of the monitored textFields that should NOT be empty
NSArray *arrTextFields = @[txtF1,txtF2,txtF3,txtF4];
//helps quicken the process by using fast-enumeration as so:
for (UITextField *txtFCurrent in arrTextFields)
if ([[txtFCurrent.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] isEqualToString:@""])
NSLog(@"%@ found to be empty",txtFCurrent);
//help direct the user to fill it
//maybe after showing an alert but anyways...
[txtFCurrent becomeFirstResponder];
//don't proceed with the main button logic
//since a required textField is empty
return;
//else...
NSLog(@"All textfields are go... Proceed with the sign up request");
//...
【讨论】:
以上是关于如果所有文本字段都填写在 ios 中,则启用按钮的主要内容,如果未能解决你的问题,请参考以下文章
当所有文本字段都填写在uitableviewcell(SWIFT)中时如何启用按钮