IOS 7 में बैक बटन बदलने से वापस नेविगेट करने के लिए स्वाइप अक्षम हो जाता है


81

मेरे पास एक iOS 7 ऐप है जहां मैं इस तरह एक कस्टम बैक बटन सेट कर रहा हूं:

    UIImage *backButtonImage = [UIImage imageNamed:@"back-button"];
    UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];

    [backButton setImage:backButtonImage forState:UIControlStateNormal];
    backButton.frame = CGRectMake(0, 0, 20, 20);

    [backButton addTarget:self
                   action:@selector(popViewController)
         forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
    viewController.navigationItem.leftBarButtonItem = backBarButtonItem;

लेकिन यह पिछले कंट्रोलर पर नेविगेट करने के लिए iOS 7 "स्वाइप टू लेफ्ट टू राइट" जेस्चर को निष्क्रिय कर देता है। क्या किसी को पता है कि मैं कैसे कस्टम बटन सेट कर सकता हूं और फिर भी इस इशारे को सक्षम रख सकता हूं?

संपादित करें: मैंने इसके बजाय viewController.navigationItem.backBarButtonItem को सेट करने का प्रयास किया, लेकिन यह मेरी कस्टम छवि नहीं दिखाता है।


मैं अभी तक इसके लिए एक उचित समाधान खोजने के लिए कर रहा हूँ ?? वहाँ कोई है जो एक अच्छा समाधान मिल गया है और समझा कि क्यों काम कर रहा है ??
user1010819

अच्छी तरह से निर्मित तीसरे पक्ष के पुस्तकालय का उपयोग कैसे करें: स्वाइपबैक ?
devxoul

जवाबों:


82

महत्वपूर्ण: यह एक हैक है। मैं इस उत्तर पर एक नज़र डालने की सलाह दूंगा

leftBarButtonItemमेरे लिए काम करने के बाद निम्नलिखित लाइन को कॉल करना:

self.navigationController.interactivePopGestureRecognizer.delegate = self;

संपादित करें: यदि initविधियों में कहा जाए तो यह काम नहीं करता है । इसे viewDidLoadया इसी तरह के तरीकों से बुलाया जाना चाहिए ।


क्या आप इसे दृश्य नियंत्रक पर सेट करते हैं? या नेविगेशन नियंत्रक? मैं एक ही समस्या है, लेकिन यह काम नहीं कर रहा है?
केविन रैंकर्स सोकर

1
@mixedCase अपने नमूना प्रोजेक्ट को डाउनलोड करने के बाद अब मैं आपके मुद्दे को समझता हूं। कोड तब तक काम करता है जब तक कि संग्रह दृश्य की सामग्री दृश्य नियंत्रक की क्षैतिज चौड़ाई से अधिक न हो। हालाँकि, जैसे ही संग्रह दृश्य क्षैतिज रूप से स्क्रॉल करने योग्य हो जाता है, यह इंटरेक्टिवपॉपगुरेचर रिकॉगनाइज़र को ओवरराइड करता है। मैं देखूंगा कि क्या मुझे कोई काम मिल सकता है।
पॉल हंटर

8
मेरे पास इस कोड के साथ समस्या है। यह लंबे समय तक काम नहीं करता है, 5-10 बैक-वीपी के बाद वीसी जमा देता है। कोई भी समाधान?
तैमूर बर्निकोविच

1
तैमूर बर्निकोविच मैं वही अनुभव कर रहा हूँ। क्या आपको इसका कोई कारण पता है?
user1010819

4
प्रतिनिधि को सेट selfकरके उसे कक्षा की किसी वस्तु से अलग करना _UINavigationInteractiveTransition। यह उस वस्तु की जिम्मेदारी है कि यह सुनिश्चित करने के लिए कि नेविगेशन नियंत्रक पॉप के लिए नहीं कहा गया है जबकि यह पहले से ही संक्रमण में है। अभी भी जांच कर रहा है कि बैक बटन कस्टम होने पर इस इशारे को सक्षम करना संभव है या नहीं।
साल्टमूल

56

यदि संभव हो तो UINavigationBar के backIndicatorImage और BackIndicatorTransitionMaskImage गुणों का उपयोग करें। UIAppearanceProxy पर इन्हें सेट करना आपके एप्लिकेशन में व्यवहार को आसानी से संशोधित कर सकता है। शिकन यह है कि आप केवल ios 7 पर सेट कर सकते हैं, लेकिन यह काम करता है क्योंकि आप केवल i7 7 पर पॉप इशारा का उपयोग कर सकते हैं। आपकी सामान्य आईओएस 6 स्टाइल बरकरार रह सकती है।

UINavigationBar* appearanceNavigationBar = [UINavigationBar appearance];
//the appearanceProxy returns NO, so ask the class directly
if ([[UINavigationBar class] instancesRespondToSelector:@selector(setBackIndicatorImage:)])
{
    appearanceNavigationBar.backIndicatorImage = [UIImage imageNamed:@"back"];
    appearanceNavigationBar.backIndicatorTransitionMaskImage = [UIImage imageNamed:@"back"];
    //sets back button color
    appearanceNavigationBar.tintColor = [UIColor whiteColor];
}else{
    //do ios 6 customization
}

इंटरैक्टिवपॉपगस्ट्योर रिकॉगनाइज़र के प्रतिनिधि को हेरफेर करने की कोशिश करने से बहुत सारे मुद्दों का सामना करना पड़ेगा।


4
धन्यवाद डैन, यह वास्तव में महत्वपूर्ण है और स्वीकृत उत्तर होना चाहिए। बस प्रतिनिधि को पुनः असाइन करके आप अपने आप को अजीब व्यवहार के बहुत से खोलते हैं। विशेष रूप से जब उपयोगकर्ता वापस स्वाइप करने का प्रयास करते हैं topViewController
क्रिस वैगनर

1
यह एक ऐसा उपाय है, जिसे आप सभी करना चाहते हैं, बैक बटन इमेज को बदलना है। लेकिन क्या होगा अगर आप बैक बटन टेक्स्ट को बदलना चाहते हैं और / या बैक बटन पर क्लिक करते समय किया गया एक्शन?
user102008

उस समय आपको UINavigationItem.leftBarButtonItem सेट करके बेहतर सेवा दी जाएगी। ऐसे कई उत्तर हैं जो google या stackoverflow पर leftBarButtonItem को खोजकर प्राप्त किए जा सकते हैं।
साल्टम्यूल

यदि आप अपने स्वयं के UI में उपस्थिति परिवर्तन को सीमित करना चाहते हैं और नेविगेशन पट्टियों को प्रभावित नहीं करते हैं जो ABPeoplePickerNavigationControllerआपके द्वारा बनाए गए उदाहरण के लिए कस्टम UINavigationControllerउपवर्ग का उपयोग कर सकते हैं :[[UINavigationBar appearanceWhenContainedIn:[THNavigationController class], nil] setBackIndicatorImage:[UIImage imageNamed:@"btn_back_arrow"]]; [[UINavigationBar appearanceWhenContainedIn:[THNavigationController class], nil] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"btn_back_arrow_highlighted"]];
टॉम

2
दुर्भाग्य से, यह iOS8 पर काम नहीं करता है। पिछला बटन अपनी उपस्थिति को मेरी कस्टम छवि में नहीं बदलता है।
लैंसफ्लरे

29

मैंने इस समाधान को देखा http://keighl.com/post/ios7-interactive-pop-gesture-custom-back-button/ जो UINavigationController को उपवर्गित करता है। इसका एक बेहतर समाधान है क्योंकि यह उस मामले को संभालता है जहां आप नियंत्रक से पहले स्वाइप करते हैं - जो दुर्घटना का कारण बनता है।

इसके अलावा मैंने देखा कि यदि आप रूट व्यू कंट्रोलर (एक पर पुश करने के बाद, और फिर से वापस) पर स्वाइप करते हैं, तो यूआई अप्रतिसादी हो जाता है (ऊपर उत्तर में भी यही समस्या)।

अतः उपवर्गित यूनेविसीकंट्रोलर में कोड इस तरह दिखना चाहिए:

@implementation NavigationController

- (void)viewDidLoad {
    [super viewDidLoad];
    __weak NavigationController *weakSelf = self;

    if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.interactivePopGestureRecognizer.delegate = weakSelf;
        self.delegate = weakSelf;
    }
}

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
    // Hijack the push method to disable the gesture
    if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.interactivePopGestureRecognizer.enabled = NO;
    }
    [super pushViewController:viewController animated:animated];
}

#pragma mark - UINavigationControllerDelegate

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animate {
    // Enable the gesture again once the new controller is shown
    self.interactivePopGestureRecognizer.enabled = ([self respondsToSelector:@selector(interactivePopGestureRecognizer)] && [self.viewControllers count] > 1);
}

@end

1
रूट व्यू कंट्रोलर पर स्वाइप करने में यही समस्या थी, धन्यवाद!
माइकल रोज़

पूरे पृष्ठ में सबसे अच्छा समाधान। पूरी तरह से काम करता है। धन्यवाद
शाहिद इकबाल

19

मैं उपयोग करता हूं

[[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"nav_back.png"]];
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"nav_back.png"]];

[UIBarButtonItem.appearance setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -64) forBarMetrics:UIBarMetricsDefault];

2
मैंने कहीं और टिप्पणियां देखीं कि यह 64 बिट मोड में समस्याओं का कारण बनता है क्योंकि वर्तमान में Apple के कोड में एक बग के कारण- मैंने सोचा था कि मैं एक चेतावनी पोस्ट करूंगा
पीटर जॉनसन

@PeterJohnson बग किस तरह का?
आर्ट-डिवाइन

बस सबसे अच्छा समाधान!
जूल

सरलतम उपाय कभी।
टौनाबून

6

मैं बैक बटन को भी छिपाता हूं, इसे एक कस्टम लेफ्टब्राइट के साथ बदल देता है।
मेरे लिए काम करने वाले पुश एक्शन के बाद इंटरैक्टिवपॉपगस्ट्योर रिकॉग्निज़र प्रतिनिधि को हटाना:

[self.navigationController pushViewController:vcToPush animated:YES];

// Enabling iOS 7 screen-edge-pan-gesture for pop action
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
    self.navigationController.interactivePopGestureRecognizer.delegate = nil;
}

4
इस विधि के साथ एक समस्या यह है कि यदि आप एक रूट पैन पर रूट व्यू करते हैं तो यह UI को लॉक कर देगा। मुझे इसका सामना करना पड़ा क्योंकि मैं एक ही दृश्य के कई उदाहरणों को नौसिखिया स्टैक पर धकेल रहा हूं।
निकोला लाजिक

@MrNickBarker मुझे बताने के लिए धन्यवाद! क्या आप सटीक परिदृश्य का वर्णन कर सकते हैं? रूट व्यू कंट्रोलर को स्वाइप करते समय मैं इसे पुन: पेश नहीं कर सका
एविशिक

4
मैं इसे viewDidLoad विधि में सेट कर रहा था। मेरा अंतिम समाधान था कि प्रतिनिधि बनने के लिए एक और वर्ग निर्धारित किया जाए, जो सिर्फ 'जेस्चररोगनाइजरशोल्डबिन' के लिए सही हो, अगर नौसेना स्टैक में एक से अधिक व्यू कंट्रोलर हो।
निकोला लाजिक

MrNickBarker किसी भी कारण से यह जमा देता है कि मैं वही अनुभव कर रहा हूं
user1010819

6
navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;

यह http://stuartkhall.com/posts/ios-7-development-tips-tricks-hacks से है , लेकिन यह कई बग का कारण बनता है:

  1. स्क्रीन के बाएं किनारे से स्वाइप करते समय नेवीगेशन कंट्रोलर में एक और व्यूकंट्रोलर को पुश करें;
  2. या, स्क्रीन के बाएँ किनारे से स्वाइप करें जब topViewController नेविगेशनकंट्रोलर से पॉप अप हो रहा हो;

उदा। जब नेवीगेशनकंट्रोलर का rootViewController प्रदर्शित हो रहा है, तो स्क्रीन के बाएं किनारे से स्वाइप करें, और किसी और चीज को टैप करें (दूसरे पर) नेविगेशनक्रंट्रोलर में एक और ViewController पुश करने के लिए, फिर

  • RootViewController किसी भी स्पर्श घटना का जवाब नहीं देता है;
  • एक और ViewController नहीं दिखाया जाएगा;
  • स्क्रीन के किनारे से फिर से स्वाइप करें, एक और ViewController दिखाया जाएगा;
  • कस्टम बैक बटन पर टैप करें दूसरे व्यू कॉन्ट्रोलर को पॉप करने के लिए, क्रैश!

तो आपको इस तरह से UIGestureRecognizerDelegateविधि को लागू करना होगा self.navigationController.interactivePopGestureRecognizer.delegate:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    if (gestureRecognizer == navigationController.interactivePopGestureRecognizer) {
        return !navigationController.<#TODO: isPushAnimating#> && [navigationController.viewControllers count] > 1;
    }
    return YES;
}

1
स्वाइपबैक इन समस्याओं का हल है।
devxoul

6

यहाँ Nick H247 के उत्तर का स्विफ्ट 3 संस्करण है

class NavigationController: UINavigationController {
  override func viewDidLoad() {
    super.viewDidLoad()
    if responds(to: #selector(getter: interactivePopGestureRecognizer)) {
      interactivePopGestureRecognizer?.delegate = self
      delegate = self
    }
  }

  override func pushViewController(_ viewController: UIViewController, animated: Bool) {
    if responds(to: #selector(getter: interactivePopGestureRecognizer)) {
      interactivePopGestureRecognizer?.isEnabled = false
    }
    super.pushViewController(viewController, animated: animated)
  }
}

extension NavigationController: UINavigationControllerDelegate {
  func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {
    interactivePopGestureRecognizer?.isEnabled = (responds(to: #selector(getter: interactivePopGestureRecognizer)) && viewControllers.count > 1)
  }
}

extension NavigationController: UIGestureRecognizerDelegate {}

3

प्रयत्न self.navigationController.interactivePopGestureRecognizer.enabled = YES;


नहीं, यह पहले से ही सक्षम है .. समस्या यह है कि इसके प्रतिनिधि इशारे-पहचानकर्ता को शुरू करने की अनुमति नहीं देते हैं, मैंने अपना समाधान यहां एक और उत्तर के रूप में जोड़ा है।
एविश

avishic क्या आप यह बताने के लिए कृपया बता सकते हैं कि प्रतिनिधि सेट करने से काम क्यों चलेगा? .. मैं उसी समस्या पर अड़ा हुआ हूँ।
user1010819

1

मैंने यह नहीं लिखा था, लेकिन निम्नलिखित ब्लॉग ने बहुत मदद की और कस्टम नेविगेशन बटन के साथ मेरे मुद्दों को हल किया:

http://keighl.com/post/ios7-interactive-pop-gesture-custom-back-button/

सारांश में, वह एक कस्टम UINavigationController को लागू करता है जो पॉप जेस्चर प्रतिनिधि का उपयोग करता है। बहुत साफ और पोर्टेबल!

कोड:

@interface CBNavigationController : UINavigationController <UINavigationControllerDelegate, UIGestureRecognizerDelegate>
@end

@implementation CBNavigationController

- (void)viewDidLoad
{
  __weak CBNavigationController *weakSelf = self;

  if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)])
  {
    self.interactivePopGestureRecognizer.delegate = weakSelf;
    self.delegate = weakSelf;
  }
}

// Hijack the push method to disable the gesture

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
  if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)])
    self.interactivePopGestureRecognizer.enabled = NO;

  [super pushViewController:viewController animated:animated];
}

#pragma mark UINavigationControllerDelegate

- (void)navigationController:(UINavigationController *)navigationController
       didShowViewController:(UIViewController *)viewController
                    animated:(BOOL)animate
{
  // Enable the gesture again once the new controller is shown

  if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)])
    self.interactivePopGestureRecognizer.enabled = YES;
}

संपादित करें। जब उपयोगकर्ता रूट व्यू कंट्रोलर पर बाईं ओर स्वाइप करने का प्रयास करता है, तो समस्याओं के लिए जोड़ा गया:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {

    if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)] &&
        self.topViewController == [self.viewControllers firstObject] &&
        gestureRecognizer == self.interactivePopGestureRecognizer) {

        return NO;
    }

    return YES;
}

यदि UI एक को छोड़ देता है, तो नेविगेशन नियंत्रक के मूल दृश्य नियंत्रक पर छोड़ देता है।
जॉनवनजिक्क

@JohnVanDijk मैंने एक फिक्स के साथ उत्तर को संपादित किया जो मुझे लगता है कि मैंने उस समस्या को हल करने के लिए लागू किया है। कुछ समय रहा है, लेकिन यह समझ में आता है। मूल रूप से, यदि शीर्ष दृश्य नियंत्रक रूट व्यू कंट्रोलर है, तो हम 'इंटरएक्टिवपोस्टग्योररोगिग्नाइज़र' का जवाब नहीं देंगे
kgaidis

यह मेरे बैक बटन को छिपा रहा है
मोहम्मद हुसैन

1

रूटव्यू

override func viewDidAppear(_ animated: Bool) {
    self.navigationController?.interactivePopGestureRecognizer?.isEnabled = false
}

चाइल्डव्यू

override func viewDidLoad() {
    self.navigationController?.interactivePopGestureRecognizer?.isEnabled = true
    self.navigationController?.interactivePopGestureRecognizer?.delegate = self
} 

extension ChildViewController: UIGestureRecognizerDelegate {}

1

स्वाइप जेस्चर को सक्षम या निष्क्रिय रखने के लिए इस तर्क का उपयोग करें।

- (void)navigationController:(UINavigationController *)navigationController
       didShowViewController:(UIViewController *)viewController
                    animated:(BOOL)animate
{
    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)])
    {
        if (self.navigationController.viewControllers.count > 1)
        {
            self.navigationController.interactivePopGestureRecognizer.enabled = YES;
        }
        else
        {
            self.navigationController.interactivePopGestureRecognizer.enabled = NO;
        }
    }
}

0

मुझे इसी तरह की समस्या थी जहां मैं वर्तमान पॉप कंट्रोलर को इंटरेक्टिव पॉप जेस्चर के लिए डेलिगेट के रूप में नियुक्त कर रहा था, लेकिन इशारों को धक्का दिए गए किसी भी दृश्य पर या नए स्टैक में देखने के नीचे दिए गए इशारे को तोड़ देगा। जिस तरह से मैंने इसे हल किया वह प्रतिनिधि को सेट करने के लिए था -viewDidAppear, फिर इसे शून्य में सेट करें -viewWillDisappear। इसने मेरे अन्य विचारों को सही ढंग से काम करने की अनुमति दी।


0

कल्पना करें कि हम Apple के डिफ़ॉल्ट मास्टर / डिटेल प्रोजेक्ट टेम्पलेट का उपयोग कर रहे हैं, जहां मास्टर एक टेबल व्यू कंट्रोलर है और इस पर टैप करने से डिटेल व्यू कंट्रोलर दिखाई देगा।

हम बैक बटन को कस्टमाइज़ करना चाहते हैं जो डिटेल व्यू कंट्रोलर में दिखाई देता है। यह इमेज , इमेज कलर , टेक्स्ट , टेक्स्ट कलर और बैक बटन के फॉन्ट को कस्टमाइज़ करने का तरीका है ।


विश्व स्तर पर छवि, छवि का रंग, पाठ का रंग, या फ़ॉन्ट बदलने के लिए, निम्नलिखित को उस स्थान पर रखें, जिसे आपके किसी भी दृश्य नियंत्रकों के निर्माण से पहले कहा जाता है (जैसे application:didFinishLaunchingWithOptions:कि एक अच्छी जगह है)।

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    UINavigationBar* navigationBarAppearance = [UINavigationBar appearance];

    // change the back button, using default tint color
    navigationBarAppearance.backIndicatorImage = [UIImage imageNamed:@"back"];
    navigationBarAppearance.backIndicatorTransitionMaskImage = [UIImage imageNamed:@"back"];

    // change the back button, using the color inside the original image
    navigationBarAppearance.backIndicatorImage = [[UIImage imageNamed:@"back"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    navigationBarAppearance.backIndicatorTransitionMaskImage = [UIImage imageNamed:@"back"];

    // change the tint color of everything in a navigation bar
    navigationBarAppearance.tintColor = [UIColor greenColor];

    // change the font in all toolbar buttons
    NSDictionary *barButtonTitleTextAttributes =
    @{
      NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-Light" size:12.0],
      NSForegroundColorAttributeName: [UIColor purpleColor]
      };

    [[UIBarButtonItem appearance] setTitleTextAttributes:barButtonTitleTextAttributes forState:UIControlStateNormal];

    return YES;
}

ध्यान दें, आप appearanceWhenContainedIn:अधिक नियंत्रण का उपयोग कर सकते हैं कि इन परिवर्तनों से कौन से कंट्रोलर प्रभावित होते हैं, लेकिन ध्यान रखें कि आप पास नहीं हो सकते [DetailViewController class], क्योंकि यह एक UINavigationController के अंदर निहित है, न कि आपका विवरण। इसका मतलब है कि यदि आपको प्रभावित होने पर अधिक नियंत्रण चाहिए तो आपको UINavigationController को उप-वर्ग करना होगा।

किसी विशिष्ट बैक बटन आइटम के टेक्स्ट या फ़ॉन्ट / रंग को अनुकूलित करने के लिए, आपको MasterViewController ( डिटेलव्यूकंट्रोलर नहीं!) में ऐसा करना होगा । यह अचूक लगता है क्योंकि बटन डिटेलव्यूकंट्रोलर पर दिखाई देता है। हालाँकि एक बार जब आप समझ जाते हैं कि नेविगेशनटेम पर एक संपत्ति सेट करके इसे अनुकूलित करने का तरीका है, तो यह अधिक समझ में आने लगता है।

- (void)viewDidLoad { // MASTER view controller
    [super viewDidLoad];

    UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithTitle:@"Testing"
                                                                   style:UIBarButtonItemStylePlain
                                                                  target:nil
                                                                  action:nil];
    NSDictionary *barButtonTitleTextAttributes =
    @{
      NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-Light" size:12.0],
      NSForegroundColorAttributeName: [UIColor purpleColor]
      };
    [buttonItem setTitleTextAttributes:barButtonTitleTextAttributes forState:UIControlStateNormal];
    self.navigationItem.backBarButtonItem = buttonItem;
}

नोट: शीर्षक को सेट करने का प्रयास करने के लिए स्वयं को सेट करने के बाद TAttributes.navigationItem.backBarButtonItem काम नहीं करता है, इसलिए उन्हें इस संपत्ति के मूल्य को निर्दिष्ट करने से पहले सेट किया जाना चाहिए।


0

एक वर्ग 'TTNavigationViewController' बनाएं जो 'UINavigationController' का उपवर्ग है और इस वर्ग के अपने मौजूदा नेविगेशन कंट्रोलर को या तो स्टोरीबोर्ड / क्लास में बनाएं, उदाहरण के लिए क्लास में कोड -

    class TTNavigationViewController: UINavigationController, UIGestureRecognizerDelegate {

override func viewDidLoad() {
    super.viewDidLoad()
    self.setNavigationBarHidden(true, animated: false)

    // enable slide-back
    if self.responds(to: #selector(getter: UINavigationController.interactivePopGestureRecognizer)) {
        self.interactivePopGestureRecognizer?.isEnabled = true
        self.interactivePopGestureRecognizer?.delegate  = self
    }
}

func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.