'dan nasıl alabilirim UIPopoverController
görüntülenen bir metnin kenarından UITextView
görüntülemeye çalışıyorum, seçili metni nasıl alabilirim CGRect
?Seçilen metin çerçevesini bir UITextView
Teşekkürler!
'dan nasıl alabilirim UIPopoverController
görüntülenen bir metnin kenarından UITextView
görüntülemeye çalışıyorum, seçili metni nasıl alabilirim CGRect
?Seçilen metin çerçevesini bir UITextView
Teşekkürler!
Sanırım [UITextInput selectedTextRange]
ve [UITextInput caretRectForPosition:]
, sizin için uygun olanıdır.
[UITextInput selectedTextRange]
[UITextInput caretRectForPosition:]
Bu giriş karakter aralığının CGRect
döner karakteri için seçilen aralığı döndürür. (iOS 5'ten beri) uyumludur, dolayısıyla UITextView
örneğiniz için bu yöntemleri kullanabilirsiniz.
Böyle bir şey olacak.
UITextRange * selectionRange = [textView selectedTextRange];
CGRect selectionStartRect = [textView caretRectForPosition:selectionRange.start];
CGRect selectionEndRect = [textView caretRectForPosition:selectionRange.end];
CGPoint selectionCenterPoint = (CGPoint){(selectionStartRect.origin.x + selectionEndRect.origin.x)/2,(selectionStartRect.origin.y + selectionStartRect.size.height/2)};
DÜZENLEME: Örnek kodun alınması zor hale geldiğinden, tamamlayıcı bir resim ekledim.
Küçük sorun, bunu orta nokta olarak adlandırıyorsunuz, ancak aslında sağ alt noktayı hesaplıyorsunuz. – Till
@Till Evet, başlangıçta [UITextInput caretRectForPosition:] giriş olarak UITextRange alacağını düşündüm, ancak (adından da anlaşılacağı gibi) aslında UITextPosition alır. Örnek kodu tamir ettim ve sanırım biraz daha zor olsa da artık daha doğru olduğunu düşünüyorum. Ve baskı için teşekkürler! – barley
Hala merkez hesaplamasında ufak bir sorun var: D ... X-koordinatını tekrar kontrol edin, parantezler yanlış olarak merkezin kalibre edilmesi için ayarlanmış. – Till
Barley cevabı aslında seçim merkezini vermeyecektir bazı durumlar vardır. Örneğin:
Bu durumda Kopyala/Yapıştır menüsü metin alanının tüm genişliğini kapsayan seçimi, merkezinde görüntülüyor görebilirsiniz. Fakat iki caret rektinin merkezini hesaplamak, sağa çok daha fazla bir pozisyon verecekti.
Sen Ayrıca yine iOS 4 desteklenmesi ve bu cevaplar birini kullanarak yapıyorsanız, bu yöntemler olduğundan emin olmak gerekir etmediğini açıkça değer selectionRectsForRange:
UITextRange *selectionRange = [textView selectedTextRange];
NSArray *selectionRects = [self.textView selectionRectsForRange:selectionRange];
CGRect completeRect = CGRectNull;
for (UITextSelectionRect *selectionRect in selectionRects) {
if (CGRectIsNull(completeRect)) {
completeRect = selectionRect.rect;
} else completeRect = CGRectUnion(completeRect,selectionRect.rect);
}
kullanarak daha kesin bir sonuç elde edebilirsiniz onları çağırmadan önce desteklenir: if ([textView respondsToSelector:@selector(selectedTextRange)]) { …
Mükemmel, bir çekicilik gibi çalıştı – aryaxt
CGRectUnion zaten bunu ele alır gibi aslında CGRectIsNull için çekime ihtiyacınız yok. CGRectUnion belgelerine göre: "Dikdörtgenlerden herhangi biri boş bir dikdörtgense, diğer dikdörtgenin bir kopyası döndürülür" –
Bu soru ne olduğunu düşündüğüm şey buysa, UIPopoverController başlığında muhtemelen yanıltıcı mıdır? CGPoint'i metin seçiminden almak istiyorsunuz, UIPopoverController'a özel bir şey değil, değil mi? – barley
Öneriniz önerildi olarak başlığı düzeltildi @barley. – Till