2013-03-26 1 views
0

Как импортировать метод из моего uiviewcontroller в класс утилиты nsobject (который я использую в диспетчере представления для вызова общих методов?) У меня большое число которые должны вызывать один и тот же метод.Как мне вызвать метод из моего uiviewcontroller в утилите nsobject class

Нужно ли использовать NSInvocation? Должен ли я использовать что-то другое, как протоколы и делегаты?

Без доступа к методу по классу полезности я просто получить «NSInvalidArgumentException»

Это основная структура, мне нужно использовать.

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 

вид контроллера - .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 

ответ

1

Похоже, вам лучше было бы подклассифицировать UIViewController и поместить туда свои методы салфетки. Затем сделайте все контроллеры просмотреть подкласс вашего нового подкласса (в примере ниже, ваш вид контроллеров будет подклассы MyViewController.

Вы бы тогда избавиться от полезности класса в целом.

// 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 { 
    // Your code here 
} 

- (void)oneFingerSwipeLeft:(UISwipeGestureRecognizer *)recognizer { 
    // Your code here 
} 

- (void)twoFingerSwiperight:(UISwipeGestureRecognizer *)recognizer { 
    // Your code here 
} 

- (void)twoFingerSwipeLeft:(UISwipeGestureRecognizer *)recognizer { 
    // Your code here 
} 

@end 

Кроме того, одна ремарка. рекомендуется, чтобы вы начали CLA ss с заглавной буквой, а также начать переменную и функции с буквой в нижнем регистре. Это помогает сделать код более читаемым.

+0

Спасибо, я даже не думал о создании подкласса UIViewcontroller. Оно работало завораживающе. (Я изменил свою пунктуацию только для примера здесь.) Я все равно хотел бы выяснить, как передать методы. – MGM

Смежные вопросы