文本字段为空时禁用按钮
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;
然后在您的实现中只需@synthesize
textFields
,您就可以快速循环它包含的文本字段,检查文本。
- (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,但它似乎不起作用。以上是关于文本字段为空时禁用按钮的主要内容,如果未能解决你的问题,请参考以下文章