[英]How to check text field changes and send them to model function? MVC / Swift 5
問題是關於 MVC 的。 當用戶輸入一些文本時,我需要檢查我的文本字段更改。 Text field is in main view controller and I need to send changes to model function which is in another class in another swift file. 請告訴我如何在 MVC 中正確執行此操作的正確方法?)我應該在我的 VC 和 Model 類中使用什么?)
在 ViewController 中使用:
import UIKit
class ViewController: UIViewController {
private let reverseWords = ReverseWords()
//MARK: IBOutlets
@IBOutlet weak var reverseTextField: UITextField!
@IBOutlet weak var exeptionTextField: UITextField!
@IBOutlet weak var resultLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
//MARK: Delegation
reverseTextField.delegate = self
exeptionTextField.delegate = self
}
//I am currently using this for checking my exeptionTextField.
//But want to move it to a model.
//How can I check exeptionTextField there?
public func reverseWithIgnoringLetters() {
guard let textForReverse = reverseTextField.trimmedTextNilIfEmpty,
let textForExeption = exeptionTextField.trimmedTextNilIfEmpty else {
resultLabel.text = ""
return
}
resultLabel.text = " " + textForReverse.components(separatedBy: " ").map {
$0.reversed(omittingCharactersIn: CharacterSet(charactersIn: textForExeption)) }.joined(separator: " ")
}
@IBAction func exceptionTextFieldEditingChanged(_ sender: UITextField) {
if segmentController.selectedSegmentIndex == 1 && exeptionTextField.hasText {
reverseWithIgnoringLetters()
} else {
resultLabel.text = " " + reverseWords.segmentedControlByCustom(
textField: reverseTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines))
}
在 model 中使用:
import UIKit
import Foundation
class ReverseWords {
public func segmentedControlByCustom(textField: String ) -> String {
if textField.isEmpty {
return ""
}
return textField.trimmingCharacters(in: .whitespacesAndNewlines)
.components(separatedBy: " ")
.map { String ( $0.reversed() ) }
.joined(separator: " ")
}
}
//MARK: Exclusions extension for exepsion text field
extension String {
func reversed(omittingCharactersIn characterSet: CharacterSet) -> String {
var reversed = reversed()
.filter { String($0).rangeOfCharacter(from: characterSet) == nil }
let excluded = enumerated()
.filter { String($0.element).rangeOfCharacter(from: characterSet) != nil }
for (i, char) in excluded {
reversed.insert(char, at: reversed.index(reversed.startIndex, offsetBy: i))
}
return String(reversed)
}
}
您可以通過實現 textField 委托方法檢查文本字段的更改
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { }
您可以使用委托或關閉或使用通知中心來更新位於不同 class 中的 model。
冒着誇大其詞的風險:
MVC = Model 查看 Controller。
您的文本字段是您的視圖 object。
您查看 controller object 是您的 controller。
您的 model 就是您的 model。
文本字段委托方法允許您查看 controller 以從您的視圖 object 中收集更改並將這些更改安裝在 model 中。 那就這樣做吧。 實現textField(_:shouldChangeCharactersIn:replacementString:)
和其他讓用戶更改文本的方法)並讓這些方法通過您的“模型函數”將更改發送到您的 model。 (您的視圖 controller 需要參考您的 model object。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.