在某些textFields或stackViews中以编程方式将UIButton更改为UILabel?

时间:2017-01-03 22:44:51

标签: ios swift uibutton uitextfield

初学者Swift程序员在这里和新的堆栈溢出。

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

我的目标是针对这个特定问题,当用户点击某个textField(在stackView中)内的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)

    }
...

然后,当用户点击它以将该按钮更改为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中编程的任何其他提示都很有帮助!

如果您需要更多详细信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

即使您使用textFieldShouldReturn函数创建textField,textField也不与该按钮相关联。所以你的目标(self.pressed)没有收到任何textField参数,并且将是nil。因此,textField == textField1永远不会成为现实。

如果您正在实施任务列表,更简单的方法是将每个新任务添加到tableView。然后,您就可以将按钮和标签(对于任务名称)与一个部分和一个部分相关联。行。

更改按钮的图像而不是删除按钮并在其中创建UILabel也会更容易。