【问题标题】:How to save UITextField position, text and background color如何保存 UITextField 位置、文本和背景颜色
【发布时间】:2020-12-15 04:43:32
【问题描述】:

我需要保存 UITextField 文本、背景颜色和位置。

开始时保存为默认值,但最终会保存到数据库中。

理想情况下,我希望能够从堆栈拖动到另一个位置,但如果可以将其添加到那里,则可以从视图中心拖动。

var TFCount = 1
var TF = UITextField()
var stack = UIStackView()


func addTFToStack()
{
 TF = UITextField()

 TF.text = "\(TFCount)"

 stack.addArrangedSubview(TF)

 TFCount += 1

 let panGesture = UIPanGestureRecognizer(target: self, action: #selector(self.panGestureHandler(panGesture:)))
    panGesture.minimumNumberOfTouches = 1
    TF.addGestureRecognizer(panGesture)

 let defaults = UserDefaults.standard
    defaults.setValue(TF.text, forKey: "TFTextSave")
    defaults.setValue(TF.backgroundColor, forKey: "TFColor")

 let TFSave = defaults.string(forKey: "TFTextSave")
}

func addTFToView()
{
 TF = UITextField()

 TF.text = "\(TFCount)"

 view.addSubview(TF)

 TFCount += 1

 let panGesture = UIPanGestureRecognizer(target: self, action: #selector(self.panGestureHandler(panGesture:)))
    panGesture.minimumNumberOfTouches = 1
    TF.addGestureRecognizer(panGesture)

 let defaults = UserDefaults.standard
    defaults.setValue(TF.text, forKey: "TFTextSave")
    defaults.setValue(TF.backgroundColor, forKey: "TFColor")

 let TFSave = defaults.string(forKey: "TFTextSave")
}


@objc func panGestureHandler(panGesture recognizer: UIPanGestureRecognizer)
{
    if recognizer.state == .began
    {
        let location = recognizer.location(in: view)
        TF.center = location
    }
    else
    {
        let location = recognizer.location(in: view)
        TF.center = location
    }
}


override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
{
  addTFToStack()
}

【问题讨论】:

  • 如果您有问题而不是请求,请告诉我们。

标签: ios swift uitextfield uipangesturerecognizer userdefaults


【解决方案1】:

你在正确的轨道上。你可以使用平移手势识别器的translation方法来实现你想做的:

class ViewController: UIViewController {
    var count = 0
    let size = CGSize(width: 100, height: 50)
    
    @objc func panned(_ gestureRecognizer: UIPanGestureRecognizer) {
        guard let touchedView = gestureRecognizer.view else { return }
        for case let subview as UITextField in self.view.subviews {
            if touchedView.contains(subview) {
                let translation = gestureRecognizer.translation(in: touchedView.superview)
                switch gestureRecognizer.state {
                    case .began,.changed:
                        var center = subview.center
                        center.x += translation.x
                        center.y += translation.y
                        subview.center = center
                        gestureRecognizer.setTranslation(.zero, in: touchedView.superview)
                    default:
                        break
                }
            }
        }
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        guard let touch = touches.first, let touchedView = touch.view else { return }
        var location = touch.location(in: touchedView)
        location.x -= size.width / 2
        location.y -= size.height / 2
        count += 1
        
        let textField = UITextField(frame: CGRect(origin: location, size: size))
        textField.backgroundColor = .orange
        textField.text = "\(count)"
        
        let pan = UIPanGestureRecognizer(target: self, action: #selector(panned))
        textField.addGestureRecognizer(pan)
        
        self.view.addSubview(textField)
    }

}

您还必须确保在末尾使用setTranslation 将开始位置重置为零。

【讨论】:

    猜你喜欢
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 2011-09-12
    相关资源
    最近更新 更多