【问题标题】:How to manage Buttons being disabled/enabled如何管理被禁用/启用的按钮
【发布时间】:2023-03-27 15:00:01
【问题描述】:

在我的应用程序中,我有一个包含 3 个文本字段的视图。在他们全部填写之前,我希望我的按钮被禁用。在情节提要中,我将其保持启用状态,但随后在 ViewDidLoad 中添加了以下内容:

 if (amtYouOwe.text.length == 0 && personYouOweMoney.text.length == 0 && self.cellNum.text.length == 0)
{
    saveButton.enabled = NO;
}

即使填写了所有字段,我的按钮也被禁用了..所以我尝试将它放在我的 IBAction 保存按钮中。这次我得到了相反的结果。无论我的按钮是什么启用。即使所有文本字段都是空白的。我相信我的代码是正确的,我只是想找到放置它的最佳位置....

感谢所有帮助,提前致谢。

【问题讨论】:

    标签: ios objective-c xcode uibutton


    【解决方案1】:

    编写一个函数来启用/禁用保存按钮

    -(void)enableDisableSave{
        if (amtYouOwe.text.length == 0 && personYouOweMoney.text.length == 0 && self.cellNum.text.length == 0){
            saveButton.enabled = NO;
        } else {
            saveButton.enabled = YES;
        }
    }
    

    编写一个 textField 的委托方法,将您的视图控制器分配为所有文本字段的委托,编写以下委托方法并在其中调用该方法,然后宾果游戏..

    - (void)textFieldDidEndEditing:(UITextField *)textField {
        [self enableDisableSave];
    }
    

    【讨论】:

    • 尝试在enableDisableSave方法周围设置断点,并检查它是否进入if条件。还要检查您是否已正确分配委托。
    • 啊,我看到代码在我完成编辑文本字段后可以正常工作,但我想要的是当视图加载时,按钮被禁用,直到输入文本字段
    • 只需在viewDidLoad 上写一个声明为saveButton.enabled=NO,这样它就可以工作了。此外,您需要更新我编辑的方法的代码以使其再次启用。
    • 在我这样做之后,无论如何它仍然处于禁用状态
    【解决方案2】:

    您应该在 UITextField 委托方法中添加按钮启用/禁用控件。每次编辑文本字段时,检查所有文本字段的长度并更改按钮状态。

    https://developer.apple.com/library/ios/documentation/uikit/reference/UITextFieldDelegate_Protocol/UITextFieldDelegate/UITextFieldDelegate.html

    【讨论】:

      【解决方案3】:

      如果你想实时检查,使用这个:

      - (void)viewDidLoad {
          [super viewDidLoad];
      
          // ..
          // your code
          // ..
      
          [self addTextChangedEvent];
          [self toggleSaveButtonStatus];
      }
      
      - (void)addTextChangedEvent {
      
          [amtYouOwe addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
          [personYouOweMoney addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
          [self.cellNum addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
      }
      
      - (void)textFieldDidChange:(UITextField *)textField {
      
          [self toggleSaveButtonStatus];
      }
      - (void)toggleSaveButtonStatus {
      
          int youOweLength = amtYouOwe.text.length;
          int personYouOweLength = personYouOweMoney.text.length;
          int cellNumLength = self.cellNum.text.length;
          saveButton.enabled = youOweLength > 0 && personYouOweLength > 0 && cellNumLength > 0;
      }
      

      【讨论】:

        【解决方案4】:

        写入.pch文件

        此宏不允许空格..

        #define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ] 
        

        然后编写委托方法

        - (void)textFieldDidEndEditing:(UITextField *)textField {
            [self enableDisableSave];
        }
        

        编写一个函数来启用/禁用保存按钮

        -(void)enableDisableSave{
            if ([allTrim(amtYouOwe.text) length] == 0 && [allTrim(personYouOweMoney.text) length] == 0 && [allTrim(self.cellNum.text) length] == 0){
                saveButton.enabled = NO;
            } else {
                saveButton.enabled = YES;
            }
        }
        

        编码愉快!!!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-05
          • 2011-12-16
          • 1970-01-01
          • 1970-01-01
          • 2017-11-07
          相关资源
          最近更新 更多