iCulture forum | iPhone, iPad,  iPod touch, Apple TV en iOS

iCulture forum | iPhone, iPad, iPod touch, Apple TV en iOS (https://forum.iculture.nl/)
-   Ontwikkelen voor iOS (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/)
-   -   Events door throwen (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/32954-events-door-throwen.html)

linwe 15-04-09 17:29

Events door throwen
 
Hey guys,

Voor de makkelijkheid, omdat ik dacht dat het zo wel had gewerkt (was dus niet) had ik een Superklasse gemaakt die een extend deed van de UIViewController. Daar deed ik een aantal zaken in, maar nu had ik graag in mijn base class een aantal events opgevangen. Die lijken enkel aan te komen in mijn superclass ??

Dus stel u voor:
Class A : UIViewController;
Class B : A;

Class A bezit bijvoorbeeld een UIScrollView en regelt de gehele view. Class B kan aan deze gegevens aan & een eventuele override doen van een aantl methodes. Door die override had ik Class B bijvoorbeeld de - (void) touchesBegan laten uitvoeren die door de UIScrollView in class A gebeurt bij aanraking van de view.

>> Probleem! Die touchesBegan uit class B wordt nooit uitgevoerd, enkel die van class A. Iemand een idee hoe dit komt, en of dit mogelijk is ? Zijnde: events opvangen in de baseClass terwijl ze afkomstig zijn van elementen uit de superClass ?

Thx!

gekkepietje 16-04-09 09:46

Even de terminologie: base class en super class zijn hetzelfde. In jouw geval is A dus de base class/super class van B.

Als je in B de touchesBegan functie overneemt, dan wordt deze aangeroepen in plaats van die van A. Dat is wat je wilt, toch?

Er schieten me twee mogelijkheden te binnen waardoor dit niet zou werken:
1) Je hebt de functienaam verkeerd gespeld en daardoor helemaal niets overgeerft.
2) Je hebt een instance van A gemaakt en niet van B.

ideveloper 16-04-09 10:56

Zou je wat code fragmenten kunnen plaatsen. Nu is het een beetje gokken waarom het niet werkt.

linwe 16-04-09 12:34

Inderdaad, de bedoeling is: B extends A. Dus: A is de superclass van B. (Sorry als het onduidelijk was:))
Nu, een typfout zou me echt wel vreemd lijken hoor, moest het toch zo zijn: I'll kill myself :)

Heb m'n mac nu niet bij de hand dus kan de code momenteel niet posten. Maar A definieerde dus een UIScrollView en plaatste daar een aantal elementen in (andere views per page). De touchesBegan method had ik gedefinieerd staan in B, maar werd dus niet opgeroepen.

linwe 19-04-09 13:59

Allereerst: sorry voor de late reply, maar hier dus een simpel voorbeeld in code:

CustomSwitch.h
Code:

#import <Foundation/Foundation.h>


@interface CustomSwitch : UISwitch {

}

@end

CustomSwitch.m
Code:

#import "CustomSwitch.h"


@implementation CustomSwitch

- (void)setOn:(BOOL)on animated:(BOOL)animated {
        NSLog(@"Switched to %@", on);
       
}

- (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
        NSLog(@"test !");
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        NSLog(@"Touches began !");
}


@end


Noch de touchesBegan noch de setOn van deze UISwitch implemenatie wordt opgeroepen wanneer ik een "CustomSwitch" op een view plaats (uit de viewDidLoad -> switch wordt wel degelijk getoond bij een run).
Code:

        CustomSwitch *mySwitch = [[CustomSwitch alloc] initWithFrame: CGRectMake(10, 10, 200, 100)];
        [self.view addSubview: mySwitch];


Wat ontbreekt er / doe ik fout ?


*** Edit: straf, als ik een custom class maak based op een UIView en zet daar dan de touchesBegan method in, wordt die wel opgeroepen...?


Alle tijden zijn GMT +2. Het is nu 07:00.