Как вызвать метод в viewController из подкласса UIButton? - PullRequest
0 голосов
/ 30 мая 2011

Я пытался найти способ распознать касание и удерживать мои кнопки.Я думал, что подклассы моих кнопок были хорошей идеей, но сейчас я борюсь с общей идеей о подклассах, родительских представлениях и контроллере представления.Поэтому, пожалуйста, прости, я боюсь, что это вопрос новичка:

Как мне вызвать метод (который я определил в моем 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

Ответы [ 2 ]

2 голосов
/ 30 мая 2011

Используйте очень простую делегат концепцию Objective-C.

Проверьте мой ответ в приведенном ниже посте для использования делегата в Objective-C.

Как настроить простой делегат для связи между двумя контроллерами представления?

2 голосов
/ 30 мая 2011

Вы можете просто добавить свойство в подклассный класс UIButton, который содержит контроллер представления.При его инициализации вам обязательно нужно добавить контроллер.

...