• Stars
    star
    139
  • Rank 262,954 (Top 6 %)
  • Language
    Objective-C
  • License
    MIT License
  • Created over 10 years ago
  • Updated about 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The UINavigationControllerWithCompletionBlock missing API !

My other works

[http://leverdeterre.github.io] (http://leverdeterre.github.io)

UINavigationControllerWithCompletionBlock

Twitter License MIT CocoaPods Travis

The UINavigationController missing API ! (push / pop with optional completionBlock). The implementation use the navigationController delegate on UINavigationController itself.

This project provides :

  • A completionBlock to manage your push/pop events,
  • A safe way to push/pop multiple controllers at the same times.
   [self.navigationController popViewControllerAnimated:YES withCompletionBlock:NULL];
   [self.navigationController popViewControllerAnimated:YES withCompletionBlock:NULL];
   [self.navigationController popViewControllerAnimated:YES withCompletionBlock:NULL];
  • No more "Nested pop animation can result in corrupted navigation bar",
  • No more "Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted."
  • No more crash because of deallocated controllers between your multiple animations.

Image

New methods

- (void)pushViewController:(UIViewController *)viewController 
                 animated:(BOOL)animated 
      withCompletionBlock:(JMONavCompletionBlock)completionBlock;

- (void)popViewControllerAnimated:(BOOL)animated 
              withCompletionBlock:(JMONavCompletionBlock)completionBlock;
- (void)popToRootViewControllerAnimated:(BOOL)animated
                    withCompletionBlock:(JMONavCompletionBlock)completionBlock;

Swizzled methods

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated; 
- (UIViewController *)popViewControllerAnimated:(BOOL)animated;

Usage UINavigationController+CompletionBlock

  • (OPTIONAL) Activate Swizzling to redirect push/pop native calls to custom implementation. This swizzling is interesting if you don't want to replace all your push/pop methods, or, if you implement your own NavigationControllerDelegate.
typedef NS_OPTIONS(NSUInteger, UINavigationControllerSwizzlingOption) {
    UINavigationControllerSwizzlingOptionDelegate       = 1 << 0,
    UINavigationControllerSwizzlingOptionOriginalPush   = 1 << 1,
    UINavigationControllerSwizzlingOptionOriginalPop    = 1 << 2
};

+ (void)activateSwizzling;
+ (void)activateSwizzlingWithOptions:(UINavigationControllerSwizzlingOption)options;
  • Use the new pop/push methods (no need swizzling because your are calling custom methods)
[self.navigationController popViewControllerAnimated:YES withCompletionBlock:NULL];
[self.navigationController pushViewController:vc animated:YES withCompletionBlock:^(BOOL successful) {
   NSLog(@"Hi ! Push done !");
}];
  • Use "old" Apple API. (Required Swizzling). The native calls will be redirected to the new custom API with default NULL completionBlock.
[self.navigationController popViewControllerAnimated:YES];
[self.navigationController pushViewController:vc animated:YES];

Installation using pods

Just add the following line in your podfile

pod 'UINavigationControllerWithCompletionBlock'

Image

More Repositories

1

CalendarIOS7

Calendar component for iOS apps
Objective-C
560
star
2

JMHoledView

A view design to be filled with holes ...
Objective-C
546
star
3

PermissiveResearch

An iOS search engine that allows mistakes in the searched element.
Objective-C
410
star
4

JMAnimatedImageView

Subclass of UIImageView to drive easy animations (manual rotation, Carousel, GIF support)
Objective-C
406
star
5

JMActionSheetDescription

ActionSheet and UIActivityViewController replacement, using a descriptor component.
Objective-C
334
star
6

iAppInfos

iAppInfos allows a easy access to ALL important App informations : iOS version, Device model, Free Disk Space, Mobile provisionning infos
Objective-C
190
star
7

CustomScrollIndicator

iOS custom ScrollIView indicator
Objective-C
183
star
8

JMOTableViewDescription

JMOTableViewDescription is an Objective-C library for easily creating and manage complex structured tableView.
Objective-C
73
star
9

LanguagesManager

An easy way to control manually the language in your application
Objective-C
64
star
10

JMCache

JMCache is a key/value store designed for persisting temporary objects. Particularities?? (NSCoding is not mandatory, you can add custom transformer to secure your data)
Objective-C
61
star
11

SecureMappingKit

Securize the mapping between your JSON and your model.
Objective-C
39
star
12

JMFormDescription

JMFormDescription is an Objective-C library for easily creating and manage complex structured Form.
Objective-C
31
star
13

JMImageScanning

Basic ocr recognition to hack secure keyboards
Objective-C
26
star
14

conference-download-scripts

Amazing videos are available but i want to see it offline
Shell
13
star
15

JMSystemNotifications

JMSystemNotifications is an Objective-C library for easily register/unregister OS System notifications
Objective-C
9
star
16

JMCrashIfResign

JMCrashIfResign is a way to protect your application against bad usage
Objective-C
8
star
17

postman

Postman iOS app to edit/execute Postman collections
Objective-C
7
star
18

ApplicationLoader-Errors

A lot of errors can occurs during Application submission !
7
star
19

JMDynamicDeviceName

JMDynamicDeviceName
Shell
4
star
20

MediaPickerManager

Shared object that allow to simplify UIImagePickerController
Objective-C
4
star
21

shakeMyApps-appScan-blog

HTML
3
star
22

DesignPatterns

Cocoa common design patterns
Objective-C
2
star
23

MaryToastin

Toast component using MaryPopin module
Objective-C
2
star
24

JMAnimationDescription

Describe your animation, i'm doing it
Objective-C
1
star
25

HexaColor

A library to parse Hexa string colors
Shell
1
star
26

bitly_ios_sdk

Objective-C
1
star
27

OneSignal-NodeJS-SDK

1
star
28

twitterCleaner

A simple OSX command line to purge yours "friends" (after an account hack for example ... in my case)
Objective-C
1
star
29

try_git

1
star
30

xctool-log2junit

A tool to convert your Xcodebuild tests output to a JUnit formated results
Shell
1
star