objective c - How do I call a method from my uiviewcontroller in a utility nsobject class -


how import method uiviewcontroller utility class of nsobject (which use in viewcontroller call common methods?) have large number of view controllers need call same method.

do need use nsinvocation? should use different protocols , delegates?

without access method utility class "nsinvalidargumentexception"

this basic structure need use.

utilityclass - .h

#import <foundation/foundation.h>  @interface utilityclass : nsobject - (void) swipeload: (uiview*)myview;  @end 

.m

#import "utilityclass.h"  @implementation utilityclass  - (void) swipeload: (uiview*) myview {     uiswipegesturerecognizer *onefingerswiperight =     [[uiswipegesturerecognizer alloc] initwithtarget:self action:@selector(onefingerswiperight:)];     [onefingerswiperight setdirection:uiswipegesturerecognizerdirectionright];     [myview addgesturerecognizer:onefingerswiperight];      uiswipegesturerecognizer *onefingerswipeleft =     [[uiswipegesturerecognizer alloc] initwithtarget:self action:@selector(onefingerswipeleft:)];     [onefingerswipeleft setdirection:uiswipegesturerecognizerdirectionleft];     [myview addgesturerecognizer:onefingerswipeleft];      uiswipegesturerecognizer *twofingerswiperight =     [[uiswipegesturerecognizer alloc] initwithtarget:self action:@selector(twofingerswiperight:)];     [twofingerswiperight setdirection:uiswipegesturerecognizerdirectionright];                 twofingerswiperight.numberoftouchesrequired = 2;     [myview addgesturerecognizer:twofingerswiperight];      uiswipegesturerecognizer *twofingerswipeleft =     [[uiswipegesturerecognizer alloc] initwithtarget:self action:@selector(twofingerswipeleft:)];     [twofingerswipeleft setdirection:uiswipegesturerecognizerdirectionleft];     twofingerswipeleft.numberoftouchesrequired = 2;     [myview addgesturerecognizer:twofingerswipeleft];             }  @end 

view controller - .h

#import <uikit/uikit.h> #import "utilityclass.h"  @class utilityclass;  @interface viewcontroller : uiviewcontroller {    utilityclass *utilityclass; }  @property (nonatomic, retain) utilityclass*utilityclass;  @end 

.m

#import "viewcontroller.h"  @interface viewcontroller ()  @end  @implementation viewcontroller  @synthesize utilityclass = _utilityclass;   - (void)viewdidload {     [super viewdidload];      self.utilityclass = [[utilityclass alloc] init];      [self.utilityclass swipeload:self.view];  }  - (void)twofingerswiperight:(uiswipegesturerecognizer *)recognizer {                 //[self another_method] }  - (void)twofingerswipeleft:(uiswipegesturerecognizer *)recognizer {                 //[self another_method] }  - (void)onefingerswiperight:(uiswipegesturerecognizer *)recognizer {                 //[self another_method] }  - (void)onefingerswipeleft:(uiswipegesturerecognizer *)recognizer {     //[self another_method] }  @end 

it sounds better off subclassing uiviewcontroller , putting swipe methods in there. make of view controllers subclass of new subclass (in example below, view controllers subclasses of myviewcontroller.

you rid of utility class altogether.

// myviewcontroller.h

#import <uikit/uikit.h>  @implementation myviewcontroller : uiviewcontroller  @end 

// myviewcontroller.m

@implementation myviewcontroller  - (void)viewdidload {     [super viewdidload];      uiswipegesturerecognizer *onefingerswiperight =     [[uiswipegesturerecognizer alloc] initwithtarget:self action:@selector(onefingerswiperight:)];     [onefingerswiperight setdirection:uiswipegesturerecognizerdirectionright];     [self.view addgesturerecognizer:onefingerswiperight];      uiswipegesturerecognizer *onefingerswipeleft =     [[uiswipegesturerecognizer alloc] initwithtarget:self action:@selector(onefingerswipeleft:)];     [onefingerswipeleft setdirection:uiswipegesturerecognizerdirectionleft];     [self.view addgesturerecognizer:onefingerswipeleft];      uiswipegesturerecognizer *twofingerswiperight =     [[uiswipegesturerecognizer alloc] initwithtarget:self action:@selector(twofingerswiperight:)];     [twofingerswiperight setdirection:uiswipegesturerecognizerdirectionright];     twofingerswiperight.numberoftouchesrequired = 2;     [self.view addgesturerecognizer:twofingerswiperight];      uiswipegesturerecognizer *twofingerswipeleft =     [[uiswipegesturerecognizer alloc] initwithtarget:self action:@selector(twofingerswipeleft:)];     [twofingerswipeleft setdirection:uiswipegesturerecognizerdirectionleft];     twofingerswipeleft.numberoftouchesrequired = 2;     [self.view addgesturerecognizer:twofingerswipeleft]; }  - (void)onefingerswiperight:(uiswipegesturerecognizer *)recognizer {     // code here }  - (void)onefingerswipeleft:(uiswipegesturerecognizer *)recognizer {     // code here }  - (void)twofingerswiperight:(uiswipegesturerecognizer *)recognizer {     // code here }  - (void)twofingerswipeleft:(uiswipegesturerecognizer *)recognizer {     // code here }  @end 

also, 1 side note. it's recommended start class names capital letter, , start variable , functions lowercase letter. helps make code more readable.


Comments

Popular posts from this blog

Hatching array of circles in AutoCAD using c# -

ios - UITEXTFIELD InputView Uipicker not working in swift -

Python Pig Latin Translator -