如何管理被禁用/启用的按钮

Posted

技术标签:

【中文标题】如何管理被禁用/启用的按钮【英文标题】:How to manage Buttons being disabled/enabled 【发布时间】:2014-02-10 03:59:21 【问题描述】:

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

 if (amtYouOwe.text.length == 0 && personYouOweMoney.text.length == 0 && self.cellNum.text.length == 0)

    saveButton.enabled = NO;

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

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

【问题讨论】:

【参考方案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;
    

编码愉快!!!

【讨论】:

以上是关于如何管理被禁用/启用的按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何启用禁用的按钮

如何使用 jQuery 禁用/启用按钮/链接?

单击相应复选框时如何启用禁用的锚按钮

如何以编程方式禁用/启用UIBarButtonItem

如何启用 HSQLDB 管理器工具菜单,因为它已被禁用

如何在js中选择下拉项目时启用按钮?