将编程方式制作的 UIButton 更改为某些文本字段或堆栈视图中的 UILabel



初学者 Swift 程序员在这里,并且是堆栈溢出的新手。

我正在尝试制作一个简单的任务列表/toDoPlanner,有点类似于iPhone上的Apple提醒应用程序。

我的目标是解决这个特定问题是,当用户在某个文本字段(在堆栈视图中)中单击UIButton时,该UIButton应该更改为UILabel。

以下是我在用户完成键入任务后显示按钮的方法。这工作正常:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    self.view.endEditing(true)
    if(textField == textField1) // if the first text field is pressed
    {
        let image = UIImage(named: "To Be Completed Circle.png")
        button = UIButton(frame: CGRect(x: 340, y: 56, width: 30, height: 30));
        button.setBackgroundImage(image, for: UIControlState.normal)
        self.view.addSubview(button)
        button.addTarget(self, action:#selector(self.pressed), for: .touchUpInside)
    }
...

然后,当用户单击UIButton将该按钮更改为UILabel时,我尝试更改UIButton的方式如下:

func pressed(textField: UITextField!) {

    let image = UIImage(named: "Checkmark.png")
    if(textField == textField1)
    {
        button.removeFromSuperview()
        let label = UILabel(frame: CGRect(x : 340, y :56, width: 30, height: 30))
        label.backgroundColor = UIColor(patternImage: image!)
        self.view.addSubview(label)
    }

整个 if 块没有被读取,我不太确定为什么。我假设它与UIButton和UITextField的独立属性有关。

感谢任何帮助,任何其他在iOS中编程的技巧都是有帮助的!

如果您需要更多详细信息,请告诉我。

您的 textField 不与按钮关联,即使您使用 textFieldShouldReturn 函数创建它也是如此。因此,您的目标(self.pressed)不会收到任何textField参数,并且将为nil。因此,您的 textField == textField1 永远不会为真。

如果要实现任务列表,更简单的方法是将每个新任务添加到表视图中。然后,您将能够将按钮和标签(用于任务名称)与部分和行相关联。

更改按钮的图像也容易得多,而不是删除它并在其位置创建 UILabel。

最新更新