1

J'essaie d'étendre la norme UIViewController avec certaines méthodes personnalisées.Extension UIViewController

#import <UIKit/UIKit.h> 

@interface UIViewController (UIViewControllerExtension) 
- (void) showNoHandlerAlertWithTitle:(NSString *)title andMessage:  (NSString*)message; 
- (void) showAlertWithTitle:(NSString *)title andMessage:(NSString*)message buttonTitles:(NSArray<NSString *>*)titles andHandler:(void (^)(UIAlertAction * action))handler; 
@end 

Comment utiliser maintenant UIViewController maintenant? J'ai besoin d'hériter de mes contrôleurs de vue personnalisés à partir de UIViewController étendu.

+2

Mettez votre code ici pas l'image du code –

+0

C'est une catégorie, pas vrai? Ensuite, il suffit d'importer le fichier .h sur un objet sous-classé UIViewController. – Larme

+0

L'importation du fichier .h dans mon contrôleur de vue personnalisé ne fonctionne pas. Les méthodes d'extension ne sont pas disponibles. – user267140

Répondre

1

Créer un fichier "UIViewController + Alert.h" contenant:

#import <UIKit/UIKit.h> 
@interface UIViewController (AlertExtension) 
- (void) showNoHandlerAlertWithTitle:(NSString *)title andMessage:  (NSString*)message; 
- (void) showAlertWithTitle:(NSString *)title andMessage:(NSString*)message buttonTitles:(NSArray<NSString *>*)titles andHandler:(void (^)(UIAlertAction * action))handler; 
@end 

Ensuite, créez un fichier "UIViewController + Alert.m" qui contient:

#import "UIViewController+Alert.h" 
@implementation UIViewController (AlertExtension) 
- (void) showNoHandlerAlertWithTitle:(NSString *)title andMessage:  (NSString*)message { 
    // Insert code here 
} 

- (void) showAlertWithTitle:(NSString *)title andMessage:(NSString*)message buttonTitles:(NSArray<NSString *>*)titles andHandler:(void (^)(UIAlertAction * action))handler { 
    // Insert code here 
} 
@end 

En que votre « SampleViewController .h ":

#import <UIKit/UIKit.h> 
#import "UIViewController+Alert.h" 

@interface SampleViewController : UIViewController 
@end 

Puis, dans "SampleViewController.m":

#import "SampleViewController.h" 
@implementation SampleViewController 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self showNoHandlerAlertWithTitle:@"Hello" andMessage:@"World"]; 
} 
@end 

Profitez-en!

+1

Il suffirait d'importer 'UIViewController + Alert.h' dans l'implémentation, sinon vous polluez vos en-têtes. De plus, '@import UIKit;' devrait être préféré à '#import '. – Sulthan

+0

Sans plus de contexte quant à savoir quelle version de Xcode et si "Enable Modules" est défini sur YES dans ses paramètres de construction, en utilisant @import UIKit; peut en fait provoquer son code à ne pas compiler; Je préférais hériter de la prudence et réutiliser une syntaxe similaire à celle utilisée dans la question. Cela étant dit, vous avez tout à fait raison d'importer le UIViewController + Alert.h uniquement dans l'implémentation, à moins que vous n'ayez l'intention que d'autres parties de votre code puissent également utiliser ces fonctions sur votre contrôleur de vue! – ekscrypto