你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS 擴展 UINavigationController 出棧返回到先前標記的位置

iOS 擴展 UINavigationController 出棧返回到先前標記的位置

編輯:IOS開發綜合

 

這一功能,是突然想到去年看一個 Java 什麼數據結構的原碼時留下的印象,那裡面就是一頓 mark,留標記,。。。都忘了

可是留下了莫名的火花兒,咱也不知道這是哪兒跟哪兒,就聯系上了,

不過確實,就是那一瞬間腦袋裡浮現了一下下那個 mark,才想起這樣做的,無厘頭哉?非也!

直接上代碼,後附使用說明:

 

MarkNavigationController.h

 

#import 

@interface MarkNavigationController : UINavigationController

@property (nonatomic, strong) NSMutableArray *markControllers;
@property (nonatomic, weak) UIViewController *lastMarkController;

- (void)popToMarkViewControllerAnimated:(BOOL)animated;
- (void)mark;

@end

 

 

MarkNavigationController.m

 

#import MarkNavigationController.h

@interface MarkNavigationController ()

@end

@implementation MarkNavigationController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.markControllers = [[NSMutableArray alloc] init];
}


#pragma mark - 

- (void)popToMarkViewControllerAnimated:(BOOL)animated {
    
    if (self.markControllers.count > 0) {
        
        [self.markControllers removeObject:self.lastMarkController];
        [self popToViewController:self.lastMarkController animated:YES];
        
        if (self.markControllers.count > 0) {
            
            self.lastMarkController = self.markControllers.lastObject;
        }
        else {
            
            self.lastMarkController = nil;
        }        
    }
}

// 必須與上一方法匹配使用,避勉內存洩漏
- (void)mark {
    
    self.lastMarkController = self.viewControllers.lastObject;
    [self.markControllers removeObject:self.lastMarkController];
    [self.markControllers addObject:self.lastMarkController];
}

@end

 

在 push 前,先調用 mark,將當前視圖控制器標記為最後一個出棧返回點,

之後無論 push 多少視圖控制器到棧中,調用 - (void)popToMarkViewControllerAnimated:(BOOL)animated; 時,會自動出棧視圖控制器直到最後標記的控制器。

實際上就是給導航控制器加了一個存儲而已。

 

壓棧前標記:

 

#pragma mark - NavigationBarButtonDelegate

- (void)leftBarButtonPressed:(id)sender {
    
    NSLog(@leftBarButtonPressed);
    
    [self mark];
    [self performSegueWithIdentifier:@SegueToGetClassCode sender:sender];
}

 

出棧返回到最後標記位置:

 

#pragma mark -

- (IBAction)popToMarkButtonPressed:(id)sender {
    
    [self popToMarkViewControllerAnimated:YES];
}


 

 

 

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved