Ios 如果我在文本字段中写入,则启用按钮

Ios 如果我在文本字段中写入,则启用按钮,ios,uibutton,uitextfield,Ios,Uibutton,Uitextfield,当您在文本字段中写入内容时,我在启用按钮方面遇到一些问题。 如果文本字段中没有任何内容,我将其禁用,但当您在其中写入内容时,我无法使其再次启用 我有这样的想法: - (void)viewDidLoad { [super viewDidLoad]; NSUInteger textLength = [_Name.text length]; [_doneButton setEnabled:(textLength > 0)]; } 使用UITextFielddeleg

当您在文本字段中写入内容时,我在启用按钮方面遇到一些问题。 如果文本字段中没有任何内容,我将其禁用,但当您在其中写入内容时,我无法使其再次启用

我有这样的想法:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSUInteger textLength = [_Name.text length];
    [_doneButton setEnabled:(textLength > 0)];

}

使用
UITextField
delegate方法再次启用按钮。当您的
textField
字符更改时,将调用委托方法,在此处启用您的按钮

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
     _doneButton.enabled = YES;
}
试试这个

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if([textField.text length]>0){
    [doneButton setEnabled:YES];        

}
else{
 [doneButton setEnabled:NO ;
}

希望这可能会对您有所帮助。

将行放入textfield委托方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
那就行了。每次在textfield中输入字符时都会调用此方法。但只有在加载viewcontroller时才会调用ViewDidLoad


希望它能对您起作用。

将委托设置为UITextField,并在ViewDidLoad中创建一个文本更改方法,如下所示

[self.textFieldTemp addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
- (void)textFieldDidChange:(UITextField *)textField {
    if(textField == self.textFieldTemp) 
        self.buttonTemp.enabled = ([self.textFieldTemp.text length] > 0) ? YES : NO; }
并添加如下方法

[self.textFieldTemp addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
- (void)textFieldDidChange:(UITextField *)textField {
    if(textField == self.textFieldTemp) 
        self.buttonTemp.enabled = ([self.textFieldTemp.text length] > 0) ? YES : NO; }

这两个功能将根据文本字段中的文本启用和禁用按钮

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
     _doneButton.enabled = YES;
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
if([textField.text length]>0){
   [doneButton setEnabled:YES];        
}
else{
 [doneButton setEnabled:NO ;
}

您可以使用UITextField的委托来启用和禁用按钮,如下所示

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
{
if (textField.text.length!=0)
{
yourButton.enabled = YES;
}
else
{
yourButton.enabled = NO;
}
}

我使用的方法根本没有使用代理。我在控制器类中创建了此方法:

- (IBAction)textFieldChanged:(id)sender
{
    self.doneButton.enabled = ([self.Name.text length] > 0) ? YES : NO;
}
然后,在Interface Builder中,我将文本字段“Editing Changed”操作设置为新方法的目标。然后,与@Paramasivan Samuttiram类似,我在
viewDidLoad:
中添加了一个额外的调用

[self textFieldChanged:self.Name];

该部分允许按钮最初处于正确的状态。

这需要放置在
shouldchangeCaractersRange:(NSRange)
放置在
viewdiload
中只会在页面加载时被调用一次,然后再也不会被调用。@SKM,我尝试了你的代码,但它不起作用。我是否应该再做一些调整以使其发挥作用?@Santiago,你是如何使其发挥作用的?请让我知道,谢谢。这不是解决办法。调用
textField:shouldChangeCharactersRange:replacementString:
时,文本尚未更改,因此名称中的“应”部分也未更改。如果您检查
[textField.text stringByReplacingCharactersInRange:range with string:string]
的长度,它将起作用。但是你应该只检查你是否会返回
YES
。不,这不会改变任何事情,我仍然有同样的问题这是最好的解决方案。其他答案在某些情况下不起作用,比如输入一个字符。但这件事解决了。我认为这是最好的解决办法。如果您有许多UITextFields,其状态可能决定按钮是否应启用,例如用户名和密码对,则特别有用