Tôi có một ứng dụng iPhone sử dụng a UINavigationController
để trình bày giao diện chi tiết: Đầu tiên là một chế độ xem, sau đó là một chế độ xem khác, sâu đến bốn cấp độ. Tôi muốn ba chế độ xem đầu tiên bị hạn chế ở hướng dọc và chỉ chế độ xem cuối cùng mới được phép xoay sang hướng ngang. Khi quay trở lại từ chế độ xem thứ tư sang chế độ xem thứ ba và chế độ xem thứ tư theo hướng ngang, tôi muốn mọi thứ xoay trở lại theo chiều dọc.
Trong iOS 5, tôi chỉ cần xác định shouldAutorotateToInterfaceOrientation:
trong mỗi bộ điều khiển chế độ xem của mình để trả về CÓ cho các hướng cho phép. Mọi thứ hoạt động như mô tả ở trên, bao gồm cả việc quay lại chế độ dọc ngay cả khi thiết bị đang được giữ ở hướng ngang khi quay trở lại từ bộ điều khiển chế độ xem # 4 đến # 3.
Trong iOS 6, tất cả các bộ điều khiển chế độ xem đều xoay theo chiều ngang, phá vỡ những bộ điều khiển không cố ý. Ghi chú phát hành iOS 6 cho biết
Nhiều trách nhiệm hơn đang chuyển sang ứng dụng và đại biểu ứng dụng. Giờ đây, các vùng chứa iOS (chẳng hạn như
UINavigationController
) không hỏi ý kiến con cái của họ để xác định xem chúng có nên tự động chuyển động hay không. [...] Hệ thống hỏi bộ điều khiển chế độ xem toàn màn hình trên cùng (thường là bộ điều khiển chế độ xem gốc) về các hướng giao diện được hỗ trợ của nó bất cứ khi nào thiết bị xoay hoặc bất cứ khi nào bộ điều khiển chế độ xem được trình bày với kiểu trình bày phương thức toàn màn hình. Hơn nữa, các hướng được hỗ trợ chỉ được truy xuất nếu bộ điều khiển chế độ xem này trả về CÓ từshouldAutorotate
phương thức của nó . [...] Hệ thống xác định xem định hướng có được hỗ trợ hay không bằng cách giao giá trị được trả về bởisupportedInterfaceOrientationsForWindow:
phương thức của ứng dụng với giá trị được trả về bởisupportedInterfaceOrientations
phương thức của bộ điều khiển toàn màn hình trên cùng.
Vì vậy, tôi đã phân lớp con UINavigationController
, cho thuộc MainNavigationController
tính boolean của mình landscapeOK
và sử dụng thuộc tính này để trả về các định hướng cho phép trong supportedInterfaceOrientations
. Sau đó, trong mỗi viewWillAppear:
phương pháp của bộ điều khiển chế độ xem của tôi, tôi có một dòng như thế này
[(MainNavigationController*)[self navigationController] setLandscapeOK:YES];
để cho biết MainNavigationController
hành vi mong muốn của tôi .
Đây là câu hỏi: Nếu bây giờ tôi điều hướng đến chế độ xem thứ tư của mình ở chế độ dọc và lật điện thoại lên, nó sẽ xoay ngang. Bây giờ tôi nhấn nút quay lại để quay lại chế độ xem thứ ba được cho là chỉ hoạt động ở chế độ dọc. Nhưng nó không xoay trở lại. Làm thế nào để tôi làm cho nó làm điều đó?
Tôi đã thử
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]
trong viewWillAppear
phương thức của bộ điều khiển chế độ xem thứ ba của tôi, nhưng nó không làm gì cả. Đây có phải là phương pháp gọi sai hoặc có thể gọi sai chỗ hay tôi nên triển khai toàn bộ nội dung theo một cách hoàn toàn khác?