여기에있는 많은 사람들이 "확인"방법이 모든 경우에 잘 작동하지 않는다고 제안했듯이, 내 프로젝트에서 수동으로 관리 할 수있는 솔루션을 찾았습니다. 요점은 일반적으로 우리가 직접 프레젠테이션을 관리한다는 것입니다. 이것은이면에서 일어나는 일이 아니므로 우리는 성찰해야합니다.
DEViewController.h
파일:
#import <UIKit/UIKit.h>
// it is a base class for all view controllers within a project
@interface DEViewController : UIViewController
// specify a way viewcontroller, is presented by another viewcontroller
// the presented view controller should manually assign the value to it
typedef NS_ENUM(NSUInteger, SSViewControllerPresentationMethod) {
SSViewControllerPresentationMethodUnspecified = 0,
SSViewControllerPresentationMethodPush,
SSViewControllerPresentationMethodModal,
};
@property (nonatomic) SSViewControllerPresentationMethod viewControllerPresentationMethod;
// other properties/methods...
@end
이제 프레젠테이션을 다음과 같이 관리 할 수 있습니다.
탐색 스택에 푸시 :
// DETestViewController inherits from DEViewController
DETestViewController *vc = [DETestViewController new];
vc.viewControllerPresentationMethod = SSViewControllerPresentationMethodPush;
[self.navigationController pushViewController:vc animated:YES];
탐색과 함께 모달로 표시 :
DETestViewController *vc = [DETestViewController new];
vc.viewControllerPresentationMethod = SSViewControllerPresentationMethodModal;
UINavigationController *nav = [[UINavigationController alloc]
initWithRootViewController:vc];
[self presentViewController:nav animated:YES completion:nil];
모달로 제시 :
DETestViewController *vc = [DETestViewController new];
vc.viewControllerPresentationMethod = SSViewControllerPresentationMethodModal;
[self presentViewController:vc animated:YES completion:nil];
또한 DEViewController
앞서 언급 한 속성이 SSViewControllerPresentationMethodUnspecified
다음과 같으면 "checking"에 폴백을 추가 할 수 있습니다 .
- (BOOL)isViewControllerPushed
{
if (self.viewControllerPresentationMethod != SSViewControllerPresentationMethodUnspecified) {
return (BOOL)(self.viewControllerPresentationMethod == SSViewControllerPresentationMethodPush);
}
else {
// fallback to default determination method
return (BOOL)self.navigationController.viewControllers.count > 1;
}
}