【问题标题】:How to enable an UIButton after entering a valid value输入有效值后如何启用 UIButton
【发布时间】:2013-02-28 14:13:01
【问题描述】:

我有这个应用程序和一个重置按钮来重置我输入的值。只要我不输入有效值,我就会尝试让按钮变为灰色。

当该值有效时,它应该启用并变为可触摸...

我该怎么做?

我正在使用此代码,但它不起作用...

//Reset values
- (IBAction)resetPressed:(UIButton *)sender {
    if (didPan==1) {
        resetPressed.enabled = YES;
    } else {
        resetPressed.enabled = NO;
    }
    self.prozent=0;
    didPan=NO;

    //remove drawn intersection line
    [intersectionLine removeFromSuperview];
    NSLog(@"resetPressed");
}

【问题讨论】:

  • 你在哪里输入值? UITextField?
  • 将通过触摸手势(线)给出值如果我越过线,didPan 将为 1,如果没有,didPan 将为 0

标签: iphone ios objective-c cocoa-touch uibutton


【解决方案1】:

要启用符合您的条件的按钮,请使用 setEnabled:YES

例如

UIButton *button = (UIButton *)sender;
[button setEnabled:YES];

更好的方法是使用点表示的版本,如下所示:

button.enabled = YES;

【讨论】:

  • 在现代objective-c中,点符号是首选。即button.enabled = YES;
  • @Andy 谢谢,如果可以的话,我会在答案中提到这一点。
  • 嗯,这就是我一直在尝试的,但它不起作用。当我按下按钮时,我不断收到来自按钮的读数:(
【解决方案2】:

在您的情况下,您使用的是if (didPan==1) {,虽然它会给出所需的结果,但最好使用if(didPan)

其次,resetPresed 是操作名称,而不是按钮或发送者,因此您应该使用发送者而不是 resetPressed

设置按钮状态使用[sender setEnabled:YES];//OR sender.enabled=YES;

所以你的代码看起来像这样

- (IBAction)resetPressed:(UIButton *)sender {

 if (didPan) {
        [sender setEnabled:YES];  //OR sender.enabled=YES;
    } else {
       [sender setEnabled:NO];  // OR sender.enabled=NO;
    }
}

【讨论】:

  • button.enabled =YES[button setEnabled:YES]
  • [sender setEnabled:YES];
  • 你甚至可以缩短为sender.setEnabled=didPan;
  • @Dave enabled 是实际的属性名称。 setEnabled是该属性的设置者不要混用!! sender.enabled=didPan;是对的
  • 是的,错字 - 这是为了抓住它。
【解决方案3】:

如果您在 UITextField 中输入值,您可以为文本字段设置委托,并在委托对象的 textFieldDidEndEditing: 方法中编写启用/禁用代码。 IE; theButton.enabled = YES/NO 从您的代码看来,您正在编写用于在该按钮本身的操作内禁用该按钮的代码,如果该按钮被禁用,则该按钮将不起作用。

【讨论】:

  • 这也是正确的,但我在写入值时没有启用按钮。
  • 这很好。保持默认状态为禁用,结束编辑后,验证值(textField.text 将在委托方法中给出值)并相应地启用/禁用。
  • 是的,但您必须关闭键盘或让第一响应者以另一种方式检查值是否有效:)。
  • 其实我刚看到你的回答。这也可以正常工作。但是每次你输入一个字符时它都会执行额外的代码。最终您无论如何都必须辞去第一响应者的职务,否则我没有正确理解您之前的评论。 :)
  • 另一种可能性是,即使用户没有完全输入他想要的内容(这也可能是有效的),输入的值也可能变得有效(可能)。这将导致按钮在用户键入时启用和禁用。只是说。 :D
【解决方案4】:

***经过长时间的搜索,我确实解决了这个问题。

我发现 ResetButton 必须有一个 Property 看起来像这样

@property (strong, nonatomic) IBOutlet UIButton *resetButton;

然后我突出显示按钮并从控件中取消选中启用(之前尝试过但它不起作用)

我使用 button.enabled=YES 并使用 [resetButton setAlpha:1] 更改颜色为正常,[resetButton setAlpha:0.5] 为未激活

感谢大家的帮助!*

【讨论】:

    【解决方案5】:

    如果您在 UITextField 中输入值,则使用文本字段的委托来确定值是否正确:

    -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
    
       if ([textField.text isValid]) { // check if text in textfield is valid
    
           button.enabled = YES;
       } else  {
           button.enabled = NO;
       }
    
       return YES;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-04-09
      • 2023-02-25
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 2021-03-05
      • 2023-04-03
      相关资源
      最近更新 更多