आप इसके लिए एक्सेसिबिलिटी एपीआई का उपयोग कर सकते हैं। सुनिश्चित करें कि "सहायक उपकरणों के लिए पहुंच सक्षम करें" सेटिंग चेक की गई है (सिस्टम प्राथमिकताएं/सार्वभौमिक पहुंच में)।
निम्न कोड स्निपेट अधिकांश अनुप्रयोगों में चयनित पाठ के सीमा (स्क्रीन निर्देशांक में) निर्धारित करेगा। दुर्भाग्यवश, यह मेल और सफारी में काम नहीं करता है, क्योंकि वे निजी अभिगम्यता विशेषताओं का उपयोग करते हैं। यह संभवतः वहां काम करने के लिए भी संभव है, लेकिन इसके लिए अधिक काम और संभवतः निजी एपीआई कॉल की आवश्यकता है।
AXUIElementRef systemWideElement = AXUIElementCreateSystemWide();
AXUIElementRef focussedElement = NULL;
AXError error = AXUIElementCopyAttributeValue(systemWideElement, kAXFocusedUIElementAttribute, (CFTypeRef *)&focussedElement);
if (error != kAXErrorSuccess) {
NSLog(@"Could not get focussed element");
} else {
AXValueRef selectedRangeValue = NULL;
AXError getSelectedRangeError = AXUIElementCopyAttributeValue(focussedElement, kAXSelectedTextRangeAttribute, (CFTypeRef *)&selectedRangeValue);
if (getSelectedRangeError == kAXErrorSuccess) {
CFRange selectedRange;
AXValueGetValue(selectedRangeValue, kAXValueCFRangeType, &selectedRange);
AXValueRef selectionBoundsValue = NULL;
AXError getSelectionBoundsError = AXUIElementCopyParameterizedAttributeValue(focussedElement, kAXBoundsForRangeParameterizedAttribute, selectedRangeValue, (CFTypeRef *)&selectionBoundsValue);
CFRelease(selectedRangeValue);
if (getSelectionBoundsError == kAXErrorSuccess) {
CGRect selectionBounds;
AXValueGetValue(selectionBoundsValue, kAXValueCGRectType, &selectionBounds);
NSLog(@"Selection bounds: %@", NSStringFromRect(NSRectFromCGRect(selectionBounds)));
} else {
NSLog(@"Could not get bounds for selected range");
}
if (selectionBoundsValue != NULL) CFRelease(selectionBoundsValue);
} else {
NSLog(@"Could not get selected range");
}
}
if (focussedElement != NULL) CFRelease(focussedElement);
CFRelease(systemWideElement);
आपने अपने ऐप की सीमाओं से पॉपओवर को कैसे दिखाया? –