web-dev-qa-db-fra.com

Comment faire en sorte qu'UILabel réponde au robinet?

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.

87
Happy

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;
203
pythonquick

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.

36
leenyburger

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
}
13
Koushik

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")
}
8
A.G

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

4
Matt S.

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

3
Hardik Thakkar

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:")
2
Aditya Jha

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]
1
Chandramani

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")
}
1
MRustamzade

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()
}
0
LeoGalante