Как заставить UILabel отвечать на тап? - PullRequest
87 голосов
/ 23 августа 2011

Я обнаружил, что могу создавать UILabel гораздо быстрее, чем UITextField, и я планирую использовать UILabel большую часть времени для своего приложения для отображения данных.пользователь нажимает на UILabel и отвечает на мой ответный звонок.Это возможно?

Спасибо.

Ответы [ 10 ]

203 голосов
/ 23 августа 2011

Вы можете добавить UITapGestureRecognizer экземпляр к вашей UILabel.

Например:

UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelTapped)];
tapGestureRecognizer.numberOfTapsRequired = 1;
[myLabel addGestureRecognizer:tapGestureRecognizer];
myLabel.userInteractionEnabled = YES;
36 голосов
/ 18 марта 2014

Если вы используете раскадровки, вы можете выполнить весь этот процесс в раскадровке без дополнительного кода.Добавьте метку в раскадровку, затем добавьте жест метки к метке.На панели «Служебные программы» убедитесь, что «Метка взаимодействия с пользователем включена».От жеста касания (внизу вашего контроллера представления в раскадровке), Ctrl + щелкните и перетащите в файл ViewController.h и создайте Действие.Затем выполните действие в файле ViewController.m.

13 голосов
/ 15 марта 2017

Swift 3.0

Инициализировать жест для tempLabel

tempLabel?.text = "Label"
let tapAction = UITapGestureRecognizer(target: self, action: #selector(self.actionTapped(_:)))
tempLabel?.isUserInteractionEnabled = true
tempLabel?.addGestureRecognizer(tapAction)

Приемник действия

func actionTapped(_ sender: UITapGestureRecognizer) {
    // code here
}

Swift 4,0

Инициализировать жест для tempLabel

tempLabel?.text = "Label"
let tapAction = UITapGestureRecognizer(target: self, action:@selector(actionTapped(_:)))
tempLabel?.isUserInteractionEnabled = true
tempLabel?.addGestureRecognizer(tapAction)

Действие получателя

func actionTapped(_ sender: UITapGestureRecognizer) {
    // code here
}
8 голосов
/ 11 февраля 2016

Swift 2.0:

Я добавляю строку nsmutable в качестве текста sampleLabel, позволяя взаимодействовать с пользователем, добавляя жест касания и вызывая метод.

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")
}
4 голосов
/ 23 августа 2011

Вместо этого вы можете использовать UIButton и установить текст на то, что вы хотите. Кнопка не должна выглядеть как кнопка, если вы не хотите

3 голосов
/ 02 октября 2015

Чтобы добавить жест касания в UILable

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];   

и для оценки метода выбора

- (void)lblClick:(UITapGestureRecognizer *)tapGesture {

}

Примечание. Добавить UIGestureRecognizerDelegate в файл .h

2 голосов
/ 09 мая 2016

Swift Версия: var tapGesture : UITapGestureRecognizer = UITapGestureRecognizer()

Затем внутри viewDidLoad(), добавьте это:

  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:")
1 голос
/ 05 октября 2016

Swift 3 от Элвина Джорджа

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 голос
/ 03 апреля 2013

Если вы хотите использовать многострочный текст в своей кнопке, создайте UILabel с многострочным текстом и добавьте в качестве подпредставления для вашей кнопки.

например:

yourLabel=[Uilabel alloc]init];
yourLabel.frame=yourButtom.Frame;//(frame size should be equal to your button's frame)
[yourButton addSubView:yourLabel]
0 голосов
/ 31 января 2016

Swift версия выглядит так:

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()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...