vorrei solo aggiungere alla risposta di Ramshad, su come affrontare con il telaio valido.
Per questo è possibile prendere in considerazione l'utilizzo di UITextView anziché UILabel, che non consente di accedere a come gestisce il layout del testo. Disabilitando la modifica, la selezione e lo scorrimento, UITextView si comporta all'incirca come una UILabel, ad eccezione di alcuni padding che è necessario rimuovere.
Per comodità, è possibile aggiungere una piccola categoria a UITextView, in cui si scrive un metodo per verificare se un punto tocca uno dei caratteri nell'intervallo.
- (BOOL)point:(CGPoint)point touchesSomeCharacterInRange:(NSRange)range
{
NSRange glyphRange = [self.layoutManager glyphRangeForCharacterRange:range actualCharacterRange:NULL];
BOOL touches = NO;
for (NSUInteger index = glyphRange.location; index < glyphRange.location + glyphRange.length; index++) {
CGRect rectForGlyphInContainer = [self.layoutManager boundingRectForGlyphRange:NSMakeRange(index, 1) inTextContainer:self.textContainer];
CGRect rectForGlyphInTextView = CGRectOffset(rectForGlyphInContainer, self.textContainerInset.left, self.textContainerInset.top);
if (CGRectContainsPoint(rectForGlyphInTextView, point)) {
touches = YES;
break;
}
}
return touches;
}
Questo potrebbe funzionare anche per un frammento di testo contenente più parole scaglionati su più righe dovute a capo automatico. Funzionerebbe anche su testi localizzati mentre trattiamo i glifi stampati.
fonte
2015-11-06 09:50:38
Ciao Li, hai testato questo codice? – Zeb