初学者 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。