以编程方式添加按钮

时间:2019-08-15 14:30:18

标签: ios swift uibutton constraints

当文本字段中有1个或多个字符时,我想使按钮出现。 目前,我有3个问题:

  1. 如果这样做,我将无法使用@objc,然后会出现以下错误“ @objc只能与类的成员,@ objc协议和类的具体扩展一起使用”。 所以基本上我不能使用该按钮。

  2. 我想为按钮添加约束,但是在某些约束上,我希望安全区域成为“ toItem”,但我不知道它为此使用的“名称”,我使用了视图。 safeAreaInsets,但是我不确定这是否是正确的方法。

  3. 我想检查文本字段中有多少个字符(因此我希望按钮在用户键入字母后立即显示)。 我认为这必须在if语句中完成,但我不知道如何检查文本字段中的字符。

这是我第一个问题的代码:

CREATE OR REPLACE PROCEDURE TEST_PRODUCT 
(
  PRODUCT IN VARCHAR2 
) AS 
BEGIN
  INSERT INTO  product_counts(productCounts)  SELECT COUNT(*) FROM products 
WHERE product_name = PRODUCT;

END TEST_PRODUCT;

DECLARE
  CURSOR cur_product
  IS
   SELECT distinct PRODUCT_NAME FROM products;
BEGIN
  FOR product IN cur_product
LOOP
BEGIN
     TEST_PRODUCT( product.product_name);
END;
END LOOP;
END;

这是第二个:

 addButton.addTarget(self, action: #selector(buttonAction(_ :)), for: .touchUpInside)

 self.view.addSubview(addButton)
 @objc func buttonAction(_ : UIButton) {

 }

这是第三个:

 let buttonRightConstraint = NSLayoutConstraint(item: addButton, attribute: .right, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view.safeAreaInsets, attribute: .right, multiplier: 1.0, constant: 16)

 let buttonTopConstraint = NSLayoutConstraint(item: addButton, attribute: .top, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view.safeAreaInsets , attribute: .top , multiplier: 1.0, constant: 16)

这是我的总代码:

 if (TextFieldName.text!.count > 0) {


 }

也许听起来像是一个愚蠢的问题,但我是初学者。

1 个答案:

答案 0 :(得分:-1)

  1. @objc func buttonAction(_ : UIButton) 是一个函数,并且必须位于同一级别的viewDidLoad之外
class AddWorkoutController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

    }

    @objc func buttonAction(_ : UIButton) {

    }
}
  1. 对我来说,最好的解决方案是将您的addButton添加到情节提要中,默认情况下选中隐藏属性(选择按钮,然后转到右侧面板>显示属性检查器>隐藏属性)

  2. 您必须在func textFieldDidEndEditing(_ textField: UITextField)扩展名中添加AddWorkoutController。在其中可以添加if (TextFieldName.text!.count > 0),然后更改isHiddenaddButton)的addButton.isHidden属性

extension AddWorkoutController: UITextFieldDelegate {
    public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }

    func textFieldDidEndEditing(_ textField: UITextField) {

    }
}

PS:请注意缩进以提高灵活性,并且通常使用camelCase编写变量。
您会在此处找到一些最佳做法=> https://github.com/raywenderlich/swift-style-guide