2
私は適切な日付だけを取るTextFieldを作成しています。今私は私のUITextFieldである同じViewControllerクラスのテキストフィールドの委任とアクションメソッドを使用しているとき、それは正常に動作しています。しかし、私はドラッグアンドドロップでどのプロジェクトでも使用できる再利用可能なコンポーネントのようにする必要があります。 MakeDate.swiftとViewController.swift別の迅速なクラスからのトリガーアクション
MakDate.swift - -
import Foundation
import UIKit
class MakeDate: NSObject, UITextFieldDelegate {
var textField: UITextField!
var string: String!
var viewController: UIViewController!
let characterset = NSCharacterSet(charactersInString: "")
init?(textField: UITextField!) {
self.textField = textField
}
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
self.string = string
return true
}
func takeProperDateInput() {
textField.addTarget(textField, action: #selector(self.textChange(_:)), forControlEvents: .EditingChanged)
}
@IBAction func textChange(sender: UITextField) {
print("\(sender.text!)")
print("\(sender.text!) && \(self.string)")
if self.string == "" {
if sender.text?.characters.count == 2 {
let index = sender.text?.endIndex.advancedBy(-2)
sender.text = sender.text?.substringToIndex(index!)
}
else if sender.text?.characters.count == 5 {
let index = sender.text?.endIndex.advancedBy(-2)
sender.text = sender.text?.substringToIndex(index!)
}
}
if sender.text?.characters.count == 1 && self.string != "" {
if self.string.rangeOfCharacterFromSet(characterset.invertedSet) != nil {
let index = sender.text?.endIndex.advancedBy(-1)
sender.text = sender.text?.substringToIndex(index!)
}
else if Int(sender.text!) != 1 && Int(sender.text!) != 0 {
sender.text = "0" + sender.text! + "/"
}
}
else if sender.text?.characters.count == 2 && self.string != "" {
if Int(string) != 1 && Int(string) != 2 && Int(string) != 0{
let index = sender.text?.endIndex.advancedBy(-1)
sender.text = sender.text?.substringToIndex(index!)
}else {
sender.text = sender.text! + "/"
}
}
else if sender.text?.characters.count == 4 && self.string != "" {
if self.string.rangeOfCharacterFromSet(characterset.invertedSet) != nil {
let index = sender.text?.endIndex.advancedBy(-1)
sender.text = sender.text?.substringToIndex(index!)
}
}
else if sender.text?.characters.count == 5 && self.string != "" {
if self.string == "/" {
var yearComponent = sender.text?.componentsSeparatedByString("/")
let index = sender.text?.endIndex.advancedBy(-2)
sender.text = sender.text?.substringToIndex(index!)
sender.text = sender.text! + "0" + yearComponent![1] + "/"
}else {
var yearComponent = sender.text?.componentsSeparatedByString("/")
if Int(yearComponent![1]) > 31 {
let index = sender.text?.endIndex.advancedBy(-1)
sender.text = sender.text?.substringToIndex(index!)
}else if Int(yearComponent![1]) > 0 && Int(yearComponent![1]) < 32 {
sender.text = sender.text! + "/"
}else {
let index = sender.text?.endIndex.advancedBy(-1)
sender.text = sender.text?.substringToIndex(index!)
}
}
}
else if sender.text?.characters.count == 10 && self.string != "" {
let index = sender.text?.endIndex.advancedBy(-4)
if sender.text?.substringFromIndex(index!).rangeOfCharacterFromSet(characterset.invertedSet) != nil {
let index = sender.text?.endIndex.advancedBy(-4)
sender.text = sender.text?.substringToIndex(index!)
} else {
var yearComponent = sender.text?.componentsSeparatedByString("/")
if Int(yearComponent![2]) == 0 {
let index = sender.text?.endIndex.advancedBy(-4)
sender.text = sender.text?.substringToIndex(index!)
}
}
}
else if sender.text?.characters.count > 10 && self.string != "" {
let index = sender.text?.endIndex.advancedBy(-1)
sender.text = sender.text?.substringToIndex(index!)
}
}
}
とViewController.swift - 私は2つのファイルが持っている
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var dateInsert: UITextField!
var dateMaker: MakeDate!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
dateMaker = MakeDate(textField: self.dateInsert)
self.dateInsert.delegate = self.dateMaker
self.dateMaker.takeProperDateInput()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
を私が手にエラーがunrecognized selector sent to instance
こんにちは!ターゲット内のtextFieldではなく、「self」を持っていてはいけませんか? textField.addTarget(self、action:#selector(self.textChange(_ :))、forControlEvents:.EditingChanged) – ohr
@ohr oh god!はい!私は何がうまくいかないのかを全部捜していた!ありがとうございました! –