我目前正在编写一个思维导图应用程序,应用程序用户可以在其中在空白页面上的任何地方添加文本字段。有没有办法做这样的事情。我想出的一种不专业的方法是向 ViewController 添加几百个空文本字段,然后用户可以填写它们。但是我相信有更好的方法。如果用户可以点击“添加文本”按钮来生成可以在空白页面上移动的文本字段(就像在 Microsoft Word 中一样),那就太好了。我真的想不出任何课程可以解决这样的任务。有人可以帮忙吗?
干杯
我目前正在编写一个思维导图应用程序,应用程序用户可以在其中在空白页面上的任何地方添加文本字段。有没有办法做这样的事情。我想出的一种不专业的方法是向 ViewController 添加几百个空文本字段,然后用户可以填写它们。但是我相信有更好的方法。如果用户可以点击“添加文本”按钮来生成可以在空白页面上移动的文本字段(就像在 Microsoft Word 中一样),那就太好了。我真的想不出任何课程可以解决这样的任务。有人可以帮忙吗?
干杯
您始终可以以编程方式创建文本字段。在您的 ViewController 文件中,您需要创建一个UITextField
. 有关 UITextField 的信息,请查看此文档。
例如,在 iOS 上,当用户用一根或多根手指触摸屏幕时,会调用 View Controller 上的方法。当用户触摸屏幕时,iOS 会调用touchesBegan
View touchesEnded
Controller。在您的情况下,您可能需要touchesEnded
,以便在用户抬起手指之前不会添加该字段。这些方法传递一个 SetUITouch
的。UITouch 类参考
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)
}
}
}
您可能已经知道如何以编程方式布局视图,但是……</p>
此代码查找触摸的位置并将该位置作为文本字段的原点。在这里,我只是在添加视图之前设置 textField 的框架,硬编码宽度为 100,高度为 30。在实践中,您可能想要研究 AutoLayout 之类的东西,特别是NSLayoutConstraint,它允许考虑的编程约束对于边界变化。如果他们同时用多个手指触摸屏幕,您也可能不想为每次触摸添加文本字段。
这允许将字段放置在用户触摸的任何位置。或者,您可以像您说的那样创建一个按钮来添加一个文本字段,然后为UITextField
要添加的默认位置提供一个默认位置,而不是观察触摸。
要在用户拖动文本字段时移动字段,您需要观察触摸,并在触摸时检查文本字段,这实际上是在某个点检查子视图。
然后,您可以touchesMoved
通过 AutoLayout 或您决定使用的任何程序来观察拖动并更新文本字段的位置。
作为 , , 的替代方法,touchesBegan
您可以使用手势识别器。请参阅Apple 文档中有关不同类型's的信息。这些可以通过指定目标和操作方法来创建,然后添加到视图中。创建点击手势识别器并将其添加到存储在名为 textfield 的变量中的 UITextField 的示例。touchesMoved
touchesEnded
UITapGestureRecognizer
let tapRecognizer = UITapGestureRecognizer(target: self, action: Selector("textFieldTapped:"))
textfield.addGestureRecognizer(tapRecognizer)