Có lẽ câu trả lời này không phù hợp với lời giải thích của bạn ngoài tiêu đề câu hỏi. Nó hữu ích khi bạn đang cố gắng biết khi nào bạn nhấn vào nút quay lại trên UINavigationBar
.
Trong trường hợp này, bạn có thể sử dụng UINavigationBarDelegate
giao thức và triển khai một trong các phương pháp sau:
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item;
- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item;
Khi didPopItem
phương thức được gọi, đó là do bạn đã nhấn vào nút quay lại hoặc bạn đã sử dụng [UINavigationBar popNavigationItemAnimated:]
phương thức và thanh điều hướng đã bật mục.
Bây giờ, nếu bạn muốn biết hành động nào đã kích hoạt didPopItem
phương pháp, bạn có thể sử dụng một cờ.
Với cách tiếp cận này, tôi không cần phải thêm mục nút thanh bên trái có hình mũi tên theo cách thủ công để làm cho nó tương tự như nút quay lại iOS và có thể đặt mục tiêu / hành động tùy chỉnh của mình.
Hãy xem một ví dụ:
Tôi có bộ điều khiển chế độ xem có bộ điều khiển chế độ xem trang và chế độ xem chỉ báo trang tùy chỉnh. Tôi cũng đang sử dụng UINavigationBar tùy chỉnh để hiển thị tiêu đề để biết tôi đang ở trang nào và nút quay lại để quay lại trang trước. Và tôi cũng có thể vuốt sang trang trước / sau trên bộ điều khiển trang.
#pragma mark - UIPageViewController Delegate Methods
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed {
if( completed ) {
if( currentIndex > lastIndex ) {
UINavigationItem *navigationItem = [[UINavigationItem alloc] initWithTitle:@"Some page title"];
[[_someViewController navigationBar] pushNavigationItem:navigationItem animated:YES];
[[_someViewController pageControl] setCurrentPage:currentIndex];
} else {
_autoPop = YES;
[[_someViewController navigationBar] popNavigationItemAnimated:YES];
[[_someViewController pageControl] setCurrentPage:currentIndex];
}
}
}
Vì vậy, sau đó tôi triển khai các phương thức ủy quyền UINavigationBar:
#pragma mark - UINavigationBar Delegate Methods
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item {
if( !_autoPop ) {
} else {
}
_autoPop = NO;
return YES;
}
Trong trường hợp này, tôi đã sử dụng shouldPopItem
vì cửa sổ bật lên hoạt hình và tôi muốn xử lý nút quay lại ngay lập tức và không đợi cho đến khi quá trình chuyển đổi hoàn tất.