ios - UINavigationBar 按钮未按正确的逻辑禁用和启用

标签 ios uitextfield uitextview uisegmentedcontrol

我有一个简单的应用程序,用户将信息输入到一系列 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/

相关文章:

ios - UISearchController 隐藏搜索栏

ios - 使用 UIImagePickerController 自定义 "Use"、 "Cancel",“Retake” 和 "Reverse Camera"按钮事件

uitextfield - Xcode UI测试-使用typeText()方法和自动更正键入文本

iPhone:当 UITextView 文本更改时,停止 UIScrollView 自动滚动

ios - 手势更新中的快速崩溃

ios - 只登录调试器,但报告中没有数据

iphone - 所有文本字段的 resignFirstResponder

swift - SCLAlertView - 专注于文本字段

swift - 在 textView 的 HTML 属性文本上通过 CSS 填充不起作用

iphone - 在 UITextview 中禁用放大镜