Cụ thể, nó hoạt động không nhất quán về trọng tâm trường văn bản.LSUIElement hoạt động không nhất quán với activationIgnoringOtherApps
Tôi có một LSUIElement bật lên trình đơn trạng thái. Trong menu đó có một khung nhìn có chứa một trường văn bản. Trường văn bản cần phải được chọn - không nhất thiết được chọn theo mặc định, nhưng tùy theo điều kiện nào.
Khi mục trạng thái được nhấn vào, nó gây nên
[NSApp activateIgnoringOtherApps:YES];
Và nó hoạt động, khoảng một nửa thời gian. * Nửa còn lại menu trạng thái dường như để xem xét bản thân "trong nền" và sẽ không cho phép tôi đặt trọng tâm vào trường văn bản ngay cả khi nhấp vào nó. (Tôi biết trình kích hoạt nhấp chuột trạng thái đang kích hoạt b/c có NSLog trên đó.)
Đây có phải là lỗi trong cách Apple xử lý các mục trạng thái này hay tôi xử lý sai kích hoạtIgnoringOtherApps?
* Thực ra, dường như nó không chỉ là lần đầu tiên sau khi một ứng dụng khác được kích hoạt. Sau đó nó hoạt động tốt.
Đoạn hoàn chỉnh:
-(void)statusItemClicked:(id)sender {
//show the popup menu associated with the status item.
[statusItem popUpStatusItemMenu:statusMenu];
//activate *after* showing the popup menu to obtain focus for the text field.
[NSApp activateIgnoringOtherApps:YES];
}
Chắc chắn kích hoạt quá muộn, nhưng mã đã được cấu trúc như bạn đề xuất. Nó gần như có vẻ như phương pháp kích hoạt không nhận được gọi là cho đến khi trình đơn trạng thái đã được miễn nhiệm (NSLog thử nghiệm dường như chịu điều này). Tôi không hiểu tại sao điều đó lại xảy ra. – iconmaster
Vì vậy, 'activateIgnoringOtherApps:' được gọi ngay sau 'popUpStatusItemMenu:', hay phương thức đó không trả lại cho đến khi menu bị loại bỏ? Bạn có thể thử thiết lập một điểm ngắt và chạy qua trình gỡ rối để xem điều gì xảy ra. – Alex
Yup, sử dụng điểm ngắt nó chắc chắn chỉ được gọi sau khi menu bị loại bỏ. Thêm mã của tôi vào bài đăng đầu tiên, mặc dù nó trông gần giống như đề xuất của bạn. – iconmaster