Thật không may, không có cách nào dễ dàng để xác định vị trí của UIBarButtonItem. Một UIBarButtonItem về bản chất là một NSObject chỉ làm hai việc: mô tả giao diện của một nút trên thanh công cụ và các sự kiện chuyển tiếp tới bộ chọn mục tiêu/hành động được chỉ định. Bây giờ, cho rằng tất cả các nút là subviews của UIToolbar, và tất cả các sự kiện nút được định tuyến thông qua UIBarButtonItems tương ứng, nó khá tầm thường để lặp qua tất cả các subviews của UIToolbar của bạn và khi bạn tìm thấy một nút có mục tiêu là của UIBarButtonItem của bạn , chỉ cần lấy khung của nút đó. Một số mã:
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;
Nguồn
2011-11-25 21:36:33
Điều này dường như không hoạt động đối với tôi trong iOS 5. – Jon
Nó hoạt động nếu bạn thay thế UIButton bằng UIControl. –
Câu trả lời đã chỉnh sửa để thay đổi UIButton thành UIControl. –