Frage

Das ist so verdammt einfach im sicher! Im fehlt etwas und im erschöpft von dem Versuch, es zu beheben. hoffentlich kann jemand helfen.

Der Button in CharacterView.m arbeitet aber die Schaltfläche in CharacterMale.m verschachtelt unten nicht. Ich bin nicht mit IB allem progmatically erfolgt. Was würde eine Taste arbeiten und andere nicht?

/////////////////////////////////////////////////////////////////////////////////
 CharacterController.m
/////////////////////////////////////////////////////////////////////////////////
#import "CharacterController.h"
#import "CharacterView.h"

@implementation CharacterController

- (id)init {
    NSLog(@"CharacterController init");
    self = [ super init ];
    if (self != nil) {
    }
    return self;
}

- (void)loadView {
    [ super loadView ];
    characterView = [ [ CharacterView alloc ] init];
    self.view = characterView;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}


- (void)dealloc {
    [super dealloc];
}

@end

/////////////////////////////////////////////////////////////////////////////////
 CharacterView.m
/////////////////////////////////////////////////////////////////////////////////

#import "CharacterView.h"
#import "CharacterMale.h"

@implementation CharacterView

- (id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        characterMale = [ [ CharacterMale alloc ] init];
        [self addSubview: characterMale];

        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake(0, 200, 200, 100);
        [button setImage:[UIImage imageNamed:@"btnCharSelect.png"] forState:UIControlStateNormal];
        [button addTarget:self action:@selector(ApplyImage:) forControlEvents:UIControlEventTouchUpInside];
        [ self addSubview: button ];
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
}

-(void)ApplyImage:(id)sender
{
    NSLog(@"CharacterView button works");
}

- (void)dealloc {
    [super dealloc];
}

@end

/////////////////////////////////////////////////////////////////////////////////
 CharacterMale.m
/////////////////////////////////////////////////////////////////////////////////

#import "CharacterMale.h"
#import "CharacterController.h"

@implementation CharacterMale

- (id)init {
    self = [ super init];
    if (self != nil) {
        UIImage *image = [UIImage imageNamed:@"charMale.png"];
        imageView = [[ UIImageView alloc] initWithImage:image];
        [image release];
        [ self addSubview: imageView ];

        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake(0, 0, 200, 100);
        [button setImage:[UIImage imageNamed:@"btnCharSelect.png"] forState:UIControlStateNormal];
        [button addTarget:self action:@selector(ApplyImage:) forControlEvents:UIControlEventTouchUpInside];
        [ self addSubview: button ];

    }
    return self;
}

-(void)ApplyImage:(id)sender
{
    NSLog(@"CharacterMal button works");
}

- (void)dealloc {
    [super dealloc];
}

@end
War es hilfreich?

Lösung

ENDLICH !!!!!!

Ich hatte alle Ansichten mit Initwithframe init und in gültigem Rahmen Rects passieren. Init sollte mit Controllern und Initwithframe vorbei Rects für UIViews verwendet werden !!!!

characterView = [ [ CharacterView alloc ] initWithFrame:CGRectMake(0, 0, 480, 320)]; 
then 
characterMale = [ [ CharacterMale alloc ] initWithFrame:frame];

Andere Tipps

Eine andere Sache zu prüfen ist, dass UIButton Subviews, die eine UIImageView nicht funktionieren überhaupt hinzugefügt wurden. Sie benötigen einen UIView erstellen, die Sie sowohl die Bild-Ansicht und die Tasten.

Dies ist wahrscheinlich, weil Interaktion gedreht wird standardmäßig auf Bildansichten aus, aber ich habe das nicht überprüft.

Hat die neue Ansicht Benutzereingaben akzeptieren? Mit anderen Worten, userInteractionEnabled auf der Ansicht „Zeichen“ aktiviert?

Ich hatte ein ähnliches Problem, wenn versucht, die Taste während der Initialisierung eines UIView mit einem Rahmen von CGRectZero hinzuzufügen:

@implementation SomeView
...
- (id)initWithTitleImage:(UIImage *) newTitleImage {
  // BROKEN: frame with CGRectZero.
  self = [super initWithFrame:CGRectZero];
  if (self) {
    UIButton *someButton = ...;
    [self addSubview someButton];
  }
}

Sobald ich den Rahmen zu einem richtigen Rechteck geändert, die Taste gearbeitet:

@implementation SomeView
...
- (id)initWithTitleImage:(UIImage *) newTitleImage {
  // WORKING: frame with proper CGRect.
  self = [super initWithFrame:CGRectMake(0, 0, 480, 320)];
  if (self) {
    UIButton *someButton = ...;
    [self addSubview someButton];
  }
}

Ich hatte Glück mit einem Wähler für eine UIButton in drawRect erstellt von UIControlEventTouchDown anstelle des beliebten UIControlEventTouchUpInside verwendet wird.

Für mich wurde das Problem verursacht, weil der Ursprung der Schaltfläche Rahmen dann übergeordneten Frame größer war.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top