为 MindMapping 应用生成应用内文本字段 Swift/xcode

Generate Text Fields in-app for MindMapping app Swift/xcode

我目前正在编写思维导图应用程序,应用程序用户可以在空白页面上的任意位置添加文本字段。有没有办法做这样的事情。我想出的一种不专业的方法是向 ViewController 添加几百个空文本字段,然后用户可以填写。但是我相信有更好的方法。如果用户可以点击 "Add Text" 按钮生成可以在空白页上移动的文本字段(就像在 Microsoft Word 中一样),那就太好了。我真的想不出任何 class 可以解决这样的任务。有人可以帮忙吗?

干杯

您始终可以通过编程方式创建文本字段。在您的 ViewController 文件中,您需要创建一个 UITextField 的实例。有关 UITextField 的信息,请查看 this documentation.

例如,在 iOS 上,当用户用一根或多根手指触摸屏幕时,将在视图控制器上调用方法。当用户触摸屏幕时,iOS 在视图控制器上调用 touchesBegantouchesEnded。在您的情况下,您可能需要 touchesEnded,以便在用户抬起 his/her 手指之前不会添加该字段。这些方法传递一组 UITouch 的。 UITouch Class Reference

Swift 中的示例视图控制器代码:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
        print("Touch Ended")

        for touch in touches {

            let touchPoint = touch.locationInView(self.view)

            let fieldFrame = CGRect(x: touchPoint.x, y: touchPoint.y, width: 100, height: 30)

            let textField = UITextField(frame: fieldFrame)
            textField.placeholder = "Type Here"

            view.addSubview(textField)

        }
    }

}

您可能已经知道如何以编程方式布局视图,但是……

此代码找到触摸的位置并将该位置作为文本字段的原点。在这里,我只是在将文本字段添加到视图之前设置它的框架,硬编码宽度为 100,高度为 30。在实践中,您可能想要研究类似 AutoLayout 的东西,特别是 NSLayoutConstraint,它允许考虑边界变化的编程约束。 如果他们同时用多个手指触摸屏幕,您可能也不想为每次触摸添加文本字段。

这允许在用户触摸的任何地方放置一个字段。或者,您可以像您所说的那样创建一个按钮来添加文本字段,然后为要添加的 UITextField 设置一个默认位置,而不是观察触摸。

拖动文本字段

要在用户拖动文本字段时移动字段,您需要观察触摸,并在触摸时检查文本字段,这本质上是 checking for a subview at a point

然后,您可以使用 touchesMoved 观察拖动并通过 AutoLayout 或您决定使用的任何程序更新文本字段的位置。

手势识别器的

作为 touchesBegantouchesMovedtouchesEnded 的替代方法,您可以使用手势识别器。请参阅 Apple's documentation 中有关 UITapGestureRecognizer 的不同类型的信息。这些可以通过指定目标和操作方法来创建,然后添加到视图中。 创建点击手势识别器并将其添加到存储在名为 textfield 的变量中的 UITextField 的示例。

let tapRecognizer = UITapGestureRecognizer(target: self, action: Selector("textFieldTapped:"))
textfield.addGestureRecognizer(tapRecognizer)