J'ai découvert que je pouvais créer UILabel beaucoup plus rapidement que UITextField et je prévois d'utiliser UILabel la plupart du temps pour mon application d'affichage de données.
Pour résumer, je souhaite laisser l’utilisateur taper sur un UILabel et laisser mon rappel répondre à cette question. Est-ce possible?
Merci.
Vous pouvez ajouter une instance UITapGestureRecognizer
à votre UILabel.
Par exemple:
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelTapped)];
tapGestureRecognizer.numberOfTapsRequired = 1;
[myLabel addGestureRecognizer:tapGestureRecognizer];
myLabel.userInteractionEnabled = YES;
Si vous utilisez des storyboards, vous pouvez effectuer tout ce processus dans le storyboard sans code supplémentaire. Ajoutez une étiquette au story-board, puis ajoutez un geste de tapotement à l'étiquette. Dans le volet Utilitaires, assurez-vous que le libellé "Interaction utilisateur activée" est coché. À partir du geste de sélection (au bas de votre contrôleur de vue dans le storyboard), ctrl + clic sur votre fichier ViewController.h, faites-le glisser et créez une action. Puis implémentez l'action dans le fichier ViewController.m.
Swift 3.
Initialiser le geste pour tempLabel
tempLabel?.text = "Label"
let tapAction = UITapGestureRecognizer(target: self, action: #selector(self.actionTapped(_:)))
tempLabel?.isUserInteractionEnabled = true
tempLabel?.addGestureRecognizer(tapAction)
Récepteur d'action
func actionTapped(_ sender: UITapGestureRecognizer) {
// code here
}
Swift 4.
Initialiser le geste pour tempLabel
tempLabel?.text = "Label"
let tapAction = UITapGestureRecognizer(target: self, action:@selector(actionTapped(_:)))
tempLabel?.isUserInteractionEnabled = true
tempLabel?.addGestureRecognizer(tapAction)
Récepteur d'action
func actionTapped(_ sender: UITapGestureRecognizer) {
// code here
}
Swift 2.0:
J'ajoute une chaîne nsmutable en tant que texte de sampleLabel, permettant une interaction utilisateur, ajoutant un geste et une méthode.
override func viewDidLoad() {
super.viewDidLoad()
let newsString: NSMutableAttributedString = NSMutableAttributedString(string: "Tap here to read the latest Football News.")
newsString.addAttributes([NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleDouble.rawValue], range: NSMakeRange(4, 4))
sampleLabel.attributedText = newsString.copy() as? NSAttributedString
let tapGesture: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "tapResponse:")
tapGesture.numberOfTapsRequired = 1
sampleLabel.userInteractionEnabled = true
sampleLabel.addGestureRecognizer(tapGesture)
}
func tapResponse(recognizer: UITapGestureRecognizer) {
print("tap")
}
Vous pouvez utiliser un UIButton à la place et définir le texte à votre guise. Le bouton n'a pas besoin de ressembler à un bouton si vous ne voulez pas
Pour ajouter le geste Tap sur UILabel
UITapGestureRecognizer *tapAction = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(lblClick:)];
tapAction.delegate =self;
tapAction.numberOfTapsRequired = 1;
//Enable the lable UserIntraction
lblAction.userInteractionEnabled = YES;
[lblAction addGestureRecognizer:tapAction];
et pour évaluer la méthode de sélection
- (void)lblClick:(UITapGestureRecognizer *)tapGesture {
}
Remarque: Ajoutez UIGestureRecognizerDelegate dans le fichier .h
Version Swift:var tapGesture : UITapGestureRecognizer = UITapGestureRecognizer()
Puis à l'intérieur de viewDidLoad()
, ajoutez ceci:
let yourLbl=UILabel(frame: CGRectMake(x,y,width,height)) as UILabel!
yourLbl.text = "SignUp"
tapGesture.numberOfTapsRequired = 1
yourLbl.addGestureRecognizer(tapGesture)
yourLbl.userInteractionEnabled = true
tapGesture.addTarget(self, action: "yourLblTapped:")
Si vous souhaitez utiliser du texte multiligne dans votre bouton, créez un UILabel
avec du texte multiligne et ajoutez-le en tant que sous-vue à votre bouton.
pour par exemple:
yourLabel=[Uilabel alloc]init];
yourLabel.frame=yourButtom.Frame;//(frame size should be equal to your button's frame)
[yourButton addSubView:yourLabel]
Swift 3 d'Alvin George
override func viewDidLoad() {
super.viewDidLoad()
let newsString: NSMutableAttributedString = NSMutableAttributedString(string: "Tap here to read the latest Football News.")
newsString.addAttributes([NSUnderlineStyleAttributeName: NSUnderlineStyle.styleDouble.rawValue], range: NSMakeRange(4, 4))
sampleLabel.attributedText = newsString.copy() as? NSAttributedString
let tapGesture: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.tapResponse))
tapGesture.numberOfTapsRequired = 1
sampleLabel.isUserInteractionEnabled = true
sampleLabel.addGestureRecognizer(tapGesture)
}
func tapResponse(recognizer: UITapGestureRecognizer) {
print("tap")
}
La version rapide ressemble à ceci:
func addGestureRecognizerLabel(){
//Create a instance, in this case I used UITapGestureRecognizer,
//in the docs you can see all kinds of gestures
let gestureRecognizer = UITapGestureRecognizer()
//Gesture configuration
gestureRecognizer.numberOfTapsRequired = 1
gestureRecognizer.numberOfTouchesRequired = 1
/*Add the target (You can use UITapGestureRecognizer's init() for this)
This method receives two arguments, a target(in this case is my ViewController)
and the callback, or function that you want to invoke when the user tap it view)*/
gestureRecognizer.addTarget(self, action: "showDatePicker")
//Add this gesture to your view, and "turn on" user interaction
dateLabel.addGestureRecognizer(gestureRecognizer)
dateLabel.userInteractionEnabled = true
}
//How you can see, this function is my "callback"
func showDatePicker(){
//Your code here
print("Hi, was clicked")
}
//To end just invoke to addGestureRecognizerLabel() when
//your viewDidLoad() method is called
override func viewDidLoad() {
super.viewDidLoad()
addGestureRecognizerLabel()
}