我有一个简单的应用程序,用户将信息输入到一系列 UITextFields
和一些其他组件中,以便应用程序填充信息。
我有 4 个 UITextFields(名称、事件、子事件和金额)、1 个 UITextView(注释)、一个 UIDatePicker 和一个 UISegmentedControl
(状态)。
名称、事件、金额和状态为必填项,其中子事件和注释为可选。
如果未填写必填字段,我已经添加了一些逻辑来禁用“保存”BarButtonItem
;但是我注意到我的逻辑无法正常工作。
逻辑是这样的:
- (void) checkTextFields
{
if (([self.nameTextField.text length] != 0 && [self.itemTextField.text length] != 0 && [self.occasionTextField.text length] != 0 && [self.isReceivedSegment selectedSegmentIndex] == 0) || [self.isReceivedSegment selectedSegmentIndex] == 1)
{
NSLog(@"This shouldn't be run if not every field is filled in");
self.saveButton.enabled = TRUE;
}
else
{
NSLog(@"Run");
self.saveButton.enabled = FALSE;
}
}
我从 viewDidLoad 调用它:
self.saveButton.enabled = FALSE;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkTextFields) name:UITextFieldTextDidChangeNotification object:nil];
[self.isReceivedSegment addTarget:self action:@selector(checkTextFields) forControlEvents:UIControlEventValueChanged];
问题
问题是:如果我在 SegmentedControl 中输入名称、事件并选择一个段,则不应启用“保存”按钮,因为未填写“金额”。
如果我输入名称、金额并选择一个段,则同样适用,不应填写“保存”按钮,因为未填写“事件”,但在这两种情况下都是如此。
我是否漏掉了一些明显的东西?
最佳答案
试试这个:
- (void) checkTextFields
{
if ([self.nameTextField.text length] != 0 && [self.itemTextField.text length] != 0 && [self.occasionTextField.text length] != 0 && ([self.isReceivedSegment selectedSegmentIndex] == 0 || [self.isReceivedSegment selectedSegmentIndex] == 1))
{
NSLog(@"This shouldn't be run if not every field is filled in");
self.saveButton.enabled = TRUE;
}
else
{
NSLog(@"Run");
self.saveButton.enabled = FALSE;
}
}
根据您实现条件的方式(带括号),当您的 selectedSegmentIndex = 1 时,无论其他条件如何,它将评估为 true。像这样在括号中移动应该可以。
请注意,我已将括号移动到包围条件的 OR 部分。
编辑将这些行添加到您的 View 确实加载方法中,以便在编辑任何文本字段后检查表单。
[nameTextField addTarget:self action:@selector(checkTextFields) forControlEvents:UIControlEventEditingChanged];
[itemTextField addTarget:self action:@selector(checkTextFields) forControlEvents:UIControlEventEditingChanged];
[occasionTextField addTarget:self action:@selector(checkTextFields) forControlEvents:UIControlEventEditingChanged];
关于ios - UINavigationBar 按钮未按正确的逻辑禁用和启用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23086085/