2013-09-08 35 views
12

Tôi mới phát triển iOS. Tôi không biết câu hỏi này đã được hỏi hay chưa, Tôi đã thử tìm kiếm giải pháp trên stackoverflow nhưng không nhận được bất kỳ kết quả nào.Làm cách nào để phát hiện các vòi trên một phần cụ thể (chuỗi phụ) của một nhãn UILabel?

Câu hỏi:

Tôi có một UILabel gọi myLabel với nội dung: "Click vào đây để tiến hành"

Bây giờ vấn đề là tôi muốn thực hiện một hành động khi người dùng chạm chỉ "Bấm ".

Tôi biết cách sử dụng UITapGestureRecognizer, nhưng nó phản hồi toàn bộ UILabel. Có thể chỉ phát hiện khi người dùng chỉ chạm vào chuỗi "Nhấp"?

+2

Bạn cũng có thể tìm thấy một số câu trả lời có khả năng hữu ích trong [này chặt chẽ liên quan (nếu không trùng lặp) câu hỏi] (http://stackoverflow.com/questions/1256887/clickable-links-in-uilabel). –

Trả lời

5

Bạn có thể kiểm tra vị trí của liên lạc để xem nó có trên từ "Nhấp" không. Điều này có thể không hoàn toàn chính xác và có thể bị hỏng nếu bạn thay đổi văn bản trong nhãn của mình.

gì bạn có thể làm là lần đầu tiên có được vị trí của các nhấp chuột bằng cách sử dụng:

CGPoint location = [gesture locationInView:gesture.view]; 

này được vị trí của các cử chỉ theo quan điểm của bạn.

Khi bạn có điều này, bạn có thể có kích thước của chữ "Click" mã hóa cứng hoặc bạn có thể tạo ra một nhãn giống với nhãn cử chỉ của bạn để có được kích thước, chẳng hạn như:

UILabel *sizeLabel = //create label with same font. 
[sizeLabel setText:@"Click"]; 
float width = [sizeLabel sizeThatFits:CGSizeMake(MAXFLOAT,MAXFLOAT)].width; 

Bạn cũng có thể làm điều này khi tạo nhãn thực và lưu chiều rộng này trong biến tĩnh để bạn chỉ phải thực hiện một lần và bạn không phải tạo thêm nhãn (tức là đặt văn bản của nhãn thực thành @ " Nhấp vào ", có được chiều rộng, và sau đó đặt nó vào văn bản thực sự).

Một khi bạn có chiều rộng, bạn và vị trí của vòi nước, bạn có thể kiểm tra xem chữ "Click" đã được khai thác bằng cách so sánh:

if (location.x < width) { 
    //Put your tap code in here. 
} 
+0

cảm ơn ... Tôi sẽ thử điều này .. –

+0

Tôi có [ví dụ đầy đủ trong câu trả lời của tôi ở đây] (http://stackoverflow.com/a/29352519/168594) cho biết cách thực hiện điều này bằng 'UILabel',' UITapGestureRecognizer ', và' NSAttributedString' - không cần phân lớp phụ. – zekel

Các vấn đề liên quan