Я пытался найти способ распознать касание и удерживать мои кнопки.Я думал, что подклассы моих кнопок были хорошей идеей, но сейчас я борюсь с общей идеей о подклассах, родительских представлениях и контроллере представления.Поэтому, пожалуйста, прости, я боюсь, что это вопрос новичка:
Как мне вызвать метод (который я определил в моем ViewController) из подкласса UIButton?
- [self someMethod];не работает - UIButton не является потомком моего ViewController.
- [super someMethod];тоже не работает - та же проблема, я полагаю
- [self.superview someMethod];... опять не повезло
- [MyViewController someMethod];тоже не работает - как это 'undecleared' - мне нужно импортировать мой ViewController?Или сделать какой-нибудь вызов протокола / класса?
Любая помощь будет принята с благодарностью.
Вот мой подкласс:
//
// MoleButton.h
//
#import <Foundation/Foundation.h>
@interface MoleButton : UIButton {
int page;
NSString *colour;
UIViewController *theViewController;
NSTimer *holdTimer;
}
@property (nonatomic, assign) int page;
@property (nonatomic, assign) NSString *colour;
@end
//
// MoleButton.m
#import "MoleButton.h"
@implementation MoleButton
@synthesize page, colour;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
[self.superview touchesBegan:touches withEvent:event];
[holdTimer invalidate];
holdTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(touchWasHeld) userInfo:nil repeats:NO];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesMoved:touches withEvent:event];
[self.superview touchesMoved:touches withEvent:event];
[holdTimer invalidate];
holdTimer = nil;
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesEnded:touches withEvent:event];
[self.superview touchesEnded:touches withEvent:event];
}
- (void)touchWasHeld
{
holdTimer = nil;
// do your "held" behavior here
NSLog(@"TOUCH WAS HELD!!!!");
[self.theViewController doSomething];
}
@end