ตามที่หลาย ๆ คนแนะนำว่าวิธีการ "ตรวจสอบ" ใช้ไม่ได้ผลในทุกกรณีในโครงการของฉันฉันได้หาวิธีแก้ไขด้วยตนเอง ประเด็นคือเรามักจะจัดการงานนำเสนอด้วยตัวเอง - นี่ไม่ใช่สิ่งที่เกิดขึ้นเบื้องหลังและเราต้องไตร่ตรอง
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
:
- (BOOL)isViewControllerPushed
{
if (self.viewControllerPresentationMethod != SSViewControllerPresentationMethodUnspecified) {
return (BOOL)(self.viewControllerPresentationMethod == SSViewControllerPresentationMethodPush);
}
else {
// fallback to default determination method
return (BOOL)self.navigationController.viewControllers.count > 1;
}
}