初学者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中编程的任何其他提示都很有帮助!
如果您需要更多详细信息,请与我们联系。
答案 0 :(得分:0)
即使您使用textFieldShouldReturn函数创建textField,textField也不与该按钮相关联。所以你的目标(self.pressed)没有收到任何textField参数,并且将是nil。因此,textField == textField1永远不会成为现实。
如果您正在实施任务列表,更简单的方法是将每个新任务添加到tableView。然后,您就可以将按钮和标签(对于任务名称)与一个部分和一个部分相关联。行。
更改按钮的图像而不是删除按钮并在其中创建UILabel也会更容易。