Correctement sous-classement UITextField en swift
J'ai donc ces objets textfield que j'ai réalisé qu'ils ont tous les mêmes propriétés, j'ai donc créé une nouvelle classe appelée "UserInputs" et s'étendait de UITextField
, tout fonctionne correctement sauf une chose, UITextFieldDelegate
fonctions ne fonctionne pas, je veux dire quand je me concentre sur eux, il ne fonctionne pas, je veux l'ajouter dans le code parce que quand vous vous concentrez sur mon champs de saisie, ils changent de frontière, comment la sous-classe de UITextField
les seuls problèmes que j'ai sont que des fonctions:
textFieldDidBeginEditing
textFieldDidEndEditing
et donc ne fonctionne pas.
c'est mon classe, où tout se passe:
import Foundation
import UIKit
class RegistrationViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var firstName: UserInputs!
@IBOutlet weak var test: UserInputs!
override func viewDidLoad() {
super.viewDidLoad()
self.firstName.delegate = self
self.test.delegate = self
}
}
C'est mon sous-classe:
class UserInputs: UITextField{
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
createBorder()
}
func createBorder(){
let border = CALayer()
let width = CGFloat(2.0)
border.borderColor = UIColor(red: 55/255, green: 78/255, blue: 95/255, alpha: 1.0).CGColor
border.frame = CGRect(x: 0, y: self.frame.size.height-width, width: self.frame.size.width, height: self.frame.size.height)
border.borderWidth = width
self.layer.addSublayer(border)
self.layer.masksToBounds = true
//print("border created")
}
func textFieldDidBeginEditing() {
print("focused")
self.pulseBorderColor()
}
func textFieldDidEndEditing() {
print("lost focus")
self.reversePulseBorderColor()
}
func pulseBorderColor(){
let pulseAnimation = CABasicAnimation(keyPath: "borderColor")
pulseAnimation.duration = 0.35
pulseAnimation.fromValue = UIColor(red: 55/255, green: 78/255, blue: 95/255, alpha: 1.0).CGColor
pulseAnimation.toValue = UIColor(red: 252/255, green: 180/255, blue: 29/255, alpha: 1.0).CGColor
pulseAnimation.fillMode = kCAFillModeForwards
pulseAnimation.removedOnCompletion = false
pulseAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
self.layer.sublayers![0].addAnimation(pulseAnimation,forKey: nil)
}
func reversePulseBorderColor(){
let pulseAnimation = CABasicAnimation(keyPath: "borderColor")
pulseAnimation.duration = 0.35
pulseAnimation.fromValue = UIColor(red: 252/255, green: 180/255, blue: 29/255, alpha: 1.0).CGColor
pulseAnimation.toValue = UIColor(red: 55/255, green: 78/255, blue: 95/255, alpha: 1.0).CGColor
pulseAnimation.fillMode = kCAFillModeForwards
pulseAnimation.removedOnCompletion = false
pulseAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
self.layer.sublayers![0].addAnimation(pulseAnimation,forKey: nil)
}
}
ce code a travaillé quand j'avais pas de sous-classe et était en train de faire à l'intérieur de ma classe principale, mais après la création de la sous-classe accent fonctions cessé de travailler, tout le reste fonctionne
principal problème est que je veux mettre en œuvre
func textFieldDidBeginEditing() {
print("focused")
}
func textFieldDidEndEditing() {
print("lost focus")
}
dans mes objets textfield donc je n'ai pas l'écrire, encore et encore
OriginalL'auteur nikagar4 | 2016-01-14
Vous devez vous connecter pour publier un commentaire.
Il ressemble à la
UITextFieldDelegate
les fonctions que vous avez dans votre code sont un peu hors. Ils devraient être:Et puisque vous voulez le
UserInputs
objets à leurs propres délégués, j'ai ajouté ce code, trop. Pour le démontrer, j'ai les deux fichiers suivants:ViewController.swift
UserInputs.swift
Ces délégué méthodes appartiennent au délégué et non à l'intérieur de la UserInputs classe.
cela ne fonctionne toujours pas, je vais poster la classe principale de sorte que vous pouvez complètement voir ce que je fais
J'ai mis à jour ma réponse avec le code que j'ai c'est de travailler.
Euh, cela ne fonctionne pas pour moi. Les délégués ont intégré au sein de la classe UITextField jamais appelée. Personne n'a jamais eu de succès avec cela?
OriginalL'auteur Jason Barker
Votre UITextFieldDelegate devraient probablement rester dans votre RegistrationViewController.
Au lieu d'annuler le délégué, vous pouvez le faire.
Dans votre méthode init, ajouter une cible à l'auto avec la fonction appropriée.
Ce doit être la accepté de répondre. Elle fait ce que l'OP veut, et ne pas interférer avec l'utilisation de délégués.
OriginalL'auteur Gaston Gonzalez
Vous pouvez modifier la frontière en appelant délégué dans UserInput
OriginalL'auteur Hamza Ansari