文本字段为空时禁用按钮

Posted

技术标签:

【中文标题】文本字段为空时禁用按钮【英文标题】:disable button when textfields are empty 【发布时间】:2011-08-15 14:55:39 【问题描述】:

您好,我是一名编程初学者,多年来一直坚持这项任务,似乎一无所获。

基本上我有几个文本字段,当用户按下按钮时,它们会在不同的页面上生成输入信息。我希望在所有文本字段都填满信息之前禁用该按钮。

到目前为止我有这个:

    - (void)textFieldDidEndEditing:(UITextField *)textField

    // make sure all fields are have something in them

if ((textfbookauthor.text.length  > 0)&& (textfbookedition.text.length > 0)&& (textfbookplace.text.length > 0)&& (textfbookpublisher.text.length > 0) && (textfbookpublisher.text.length > 0) && (textfbooktitle.text.length > 0)  && (textfbookyear.text.length > 0)) 
        self.submitButton.enabled = YES;
    
    else 
        self.submitButton.enabled = NO;
    

问题是“提交按钮”出现错误,需要用什么代替它? 我试图将我的按钮“bookbutton”放入其中,但它不起作用。

这是我的“生成”按钮功能

    -(IBAction)bookbutton:(id)sender;

    NSString* combinedString = [NSString stringWithFormat:
                                @"%@ %@ %@.%@.%@:%@.", 
                                textfbookauthor.text,
                                textfbookyear.text,
                                textfbooktitle.text,
                                textfbookedition.text,
                                textfbookplace.text,
                                textfbookpublisher.text];
    BookGenerate*bookg = [[BookGenerate alloc] init];
    bookg.message = combinedString;
    bookg.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:bookg animated:YES];
    [BookGenerate release];

如果有人知道我如何使它工作或我需要添加什么,请帮助。

提前致谢

【问题讨论】:

【参考方案1】:

为每个 UITextField 创建一个 Outlet 并在您的 .h 中创建一个 IBAction:

IBOutlet UITextField *textField1;
IBOutlet UITextField *textField2;
IBOutlet UITextField *textField3;
IBOutlet UIButton *button

- (IBAction)editingChanged;

使用editingChanged连接所有出口并将IBAction连接到每个文本字段:

 - (IBAction)editingChanged 
    if ([textfield1.text length] != 0 && [textfield2.text length] != 0 && [textfield3.text length] != 0) 
         [button setEnabled:YES];
     
     else 
         [button setEnabled:NO];
     
 

请注意,您也可以使用[textfield.text isEqualToString:@""] 并在其前面放一个!! 表示“不”)来识别空文本字段,并说“如果文本字段为空,请...”

还有:

- (void)viewDidLoad 
    [super viewDidLoad];
    [button setEnabled:NO];

【讨论】:

非常感谢你为我提供这个我现在就试试 不错!感谢您的回答。如果使用 UITextView,请尝试 this。【参考方案2】:

如果您有一个按钮,并且您希望仅当文本字段或文本视图中有文本时才启用它,请实现以下方法

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
    
    if (textView.text.length > 1 || (text.length > 0 && ![text isEqualToString:@""]))
    
        self.button.enabled = YES;
    
    else
    
        self.button.enabled = NO;
    

    return YES;

【讨论】:

【参考方案3】:

这些帖子也提供了一些解决方案

Very Similar Query A different version of it

这里的关键是使用(扩展)UITextFieldDelegate 类及其关联函数

//Need to have the ViewController extend UITextFieldDelegate for using this feature
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool 

    // Find out what the text field will be after adding the current edit
    let text = (textField.text as NSString).stringByReplacingCharactersInRange(range, withString: string)

    if !text.isEmpty//Checking if the input field is not empty
        button.userInteractionEnabled = true //Enabling the button
     else 
        button.userInteractionEnabled = false //Disabling the button
    

    // Return true so the text field will be changed
    return true

【讨论】:

【参考方案4】:

您应该使用“文本字段应该更改范围内的字符”(有关 uitextviewdelegate,请参阅苹果文档)。因为它会随着用户输入信息而更新。“文本字段确实结束了编辑”仅在用户完成编辑文本字段或按 Enter 时触发。在大多数情况下,有人会填写最后一个字段并将光标留在原处并期望按钮启用......但使用“文本字段确实结束编辑”不会发生这种情况,因为他们输入了输入。

你也可以这样做来检查长度

if([self.textfiele.text isEqualToString:@""])

【讨论】:

如果你有时间可以给我一个例子吗?我一直在尝试到处阅读并尝试了许多不同的示例,但似乎无法正常工作【参考方案5】:

除了为每个 UITextField 设置 IBOutlet 之外,声明一个包含数组中所有 3 个文本字段的 IBOutletCollection 可能会有所帮助。

@property (nonatomic, retain) IBOutletCollection(UITextField) NSArray *textFields;

然后在您的实现中只需@synthesizetextFields,您就可以快速循环它包含的文本字段,检查文本。

- (IBAction)editingChanged

    BOOL buttonShouldBeEnabled = YES;

    for (UITextField *field in self.textFields)
        if (!field.text.length)
            buttonShouldBeEnabled = NO;

    button.enabled = buttonShouldBeEnabled;

【讨论】:

与 Maxners 的答案相比,这有什么好处? 顺便问一下,当我单击生成按钮时,您知道如何在另一个 xib 上生成 2 个文本字段吗?我的第一篇文章展示了我如何在另一个 xib 上生成所有文本字段,但我说我只想在上面输出 textfbookplace n textfbookyear 你知道我该怎么做吗?我尝试使用格式创建另一个 nsstring,但它似乎不起作用。

以上是关于文本字段为空时禁用按钮的主要内容,如果未能解决你的问题,请参考以下文章

当textfield为空时禁用按钮等待其他文本字段中的任何更改

AngularJS:输入字段为空时禁用按钮

仅当特定输入为空时,如何禁用按钮?

当 1 个或多个 TextBox 字段为空时禁用按钮

当 textArea 为空时,按钮不会被禁用

输入为空时如何禁用按钮?