嗨,我是一名编程初学者,多年来一直坚持这项任务,似乎无处可去。
基本上我有几个文本字段,当用户按下按钮时,它会在不同的页面上生成输入信息。我希望在所有文本字段都填充信息之前禁用该按钮。
到目前为止,我有这个: - (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;
}
}
问题是'submitButton'出现错误,需要取代它的位置? 我试着将按钮'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];
}
如果有人知道我如何使它工作或我需要添加什么,请帮助。
提前致谢
答案 0 :(得分:25)
为每个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:@""]
并在其前面添加!
(!
表示'不')以识别空textField,并说'如果textField是空的......'
和
- (void)viewDidLoad {
[super viewDidLoad];
[button setEnabled:NO];
}
答案 1 :(得分:6)
如果您有一个按钮,并且只有在textfield或textview中有文本时才启用它,请执行以下方法
- (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;
}
答案 2 :(得分:2)
这些帖子上也有很少的解决方案
这里的关键是使用(扩展)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
}
答案 3 :(得分:1)
您应该使用“textfield应该更改范围内的chracters”(请参阅ucextviewdelegate的apple docs)。因为它会在用户输入信息时更新。“Textfield确实结束编辑”仅在用户完成编辑文本字段或点击输入时触发。在大多数情况下,有人会填写最后一个字段并将光标留在那里并期望按钮变为启用...但是,仅仅因为输入了“textfield did end editing”就不会发生这种情况。
你也可以这样做来检查长度
if([self.textfiele.text isEqualToString:@""])
答案 4 :(得分:1)
除了为每个UITextField提供IBOutlets之外,声明包含数组中所有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;
}