Desafortunadamente, no hay una manera fácil de determinar la posición de un UIBarButtonItem. Un UIBarButtonItem es esencialmente un objeto NSO que solo hace dos cosas: describir el aspecto y la sensación de un botón de la barra de herramientas, y reenviar eventos al selector designado de objetivo/acción.
Ahora, dado que todos los botones son subvistas de UIToolbar y todos los eventos de botón se enrutan a través de sus UIBarButtonItems respectivos, es bastante trivial recorrer todas las subvistas de su UIToolbar y cuando encuentra un botón cuyo objetivo es el de su UIBarButtonItem , solo consigue el marco de ese botón. Algunos código:
UIToolbar *toolbar = <your toolbar>;
UIBarButtonItem *barButtonItem = <your item>;
UIButton *button = nil;
for (UIView *subview in toolbar.subviews) {
if ([subview isKindOfClass:[UIButton class]]) {
for (id target in [(UIButton *)subview allTargets]) {
if (target == barButtonItem) {
button = (UIButton *)subview;
break;
}
}
if (button != nil) break;
}
}
CGRect frame = button.frame;
Esto no parece funcionar para mí en iOS 5. – Jon
Funciona si reemplaza UIButton con UIControl. –
Respuesta modificada para cambiar UIButton a UIControl. –