2010-12-01 5 views
1

Ich habe eine Ansicht basierte Anwendung erstellt. Und Hinzugefügt neue Klasse, die von UIView erstreckt. Diese Klasse enthält einige Steuerelemente (einfache Steuerelemente). Jetzt möchte ich dieses Steuerelement anzeigen/ausblenden, wenn der Benutzer auf etwas klickt. Die Steuerung sollte als Overlay-Fenster angezeigt werden. Über allen anderen Kontrollen. Ich versuche, dies zu tun wie:Benutzerdefiniertes Steuerelement wird nicht im Fenster angezeigt

Alles geht gut, debug in benutzerdefinierten Steuerungscode, aber nichts auf dem Bildschirm angezeigt. Ich habe versucht, es manuell hinzuzufügen, und es funktioniert, aber ich muss es in der Laufzeit hinzufügen. Was könnte der Grund dafür sein, dass die Kontrolle nicht angezeigt wird?

komplette Code für OverlayChannelPicker

@implementation OverlayChannelPicker 
@synthesize myImage; 
@synthesize img1; 
@synthesize img2; 

- (id)initWithFrame:(CGRect)frame { 
    if ((self = [super initWithFrame:frame])) { 
     // Initialization code 
    } 
    return self; 
} 

- (void)awakeFromNib{ 
    img1 = [UIImage imageNamed:@"imgTest.jpg"]; 
    img2 = [UIImage imageNamed:@"imgTest2.jpg"]; 

    arrayOfImages = [[NSMutableArray alloc] init]; 
    [arrayOfImages addObject:img1]; 
    [arrayOfImages addObject:img2]; 
    [arrayOfImages addObject:img1]; 
    [arrayOfImages addObject:img2]; 
    [arrayOfImages addObject:img1]; 
    [arrayOfImages addObject:img2]; 
    [arrayOfImages addObject:img1]; 
    [arrayOfImages addObject:img2]; 
    [arrayOfImages addObject:img1]; 
    [arrayOfImages addObject:img2]; 
    [arrayOfImages addObject:img1]; 
    [arrayOfImages addObject:img2]; 

    scrollView = [[UIScrollView alloc] init]; 
    scrollView.scrollEnabled = YES; 
    scrollView.pagingEnabled = NO; // for smooth scroll 
    scrollView.directionalLockEnabled = YES; 
    scrollView.showsVerticalScrollIndicator = NO; 
    scrollView.showsHorizontalScrollIndicator = NO; 
    scrollView.delegate = self; 
    //scrollView.backgroundColor = [UIColor blueColor]; 
    scrollView.autoresizesSubviews = YES; 
    scrollView.frame = CGRectMake(0, 150, 320, 128); 
    [scrollView setContentSize:CGSizeMake(1620, 128)]; 
    [self addSubview:scrollView]; 

    UIImage *imageToAdd; 
    int x = 0; 
    int y = 0; 
    for(imageToAdd in arrayOfImages) 
    {  
     UIImageView *temp = [[UIImageView alloc] initWithImage:imageToAdd];  

     temp.frame = CGRectMake(x, y, 128, 128); 
     temp.userInteractionEnabled = YES;  
     x += 135; 


     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageTapped:)]; 
     [temp addGestureRecognizer:tap];  

     [scrollView addSubview:temp]; 
    } 

} 

- (void)imageTapped:(UIGestureRecognizer *)sender 
{  
    UIImageView *iv = (UIImageView *)[sender view]; 
    UIImage *image = [iv image]; 
    UIImage *it = [arrayOfImages indexOfObject:image]; 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:1]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:iv cache:YES]; 

    if(it == img1) 
     it = img2; 
    else 
     it = img1; 

    [UIView commitAnimations]; 
} 

Und es ist Header:

@interface OverlayChannelPicker : UIView <UIScrollViewDelegate>{ 
    IBOutlet UIImageView *myImage; 
    UIImage *img1; 
    UIImage *img2; 

    IBOutlet UIScrollView *scrollView; 
    int view1Index; 
    int view2Index; 
    NSMutableArray *arrayOfImages; 

} 
@property (nonatomic, retain) UIImageView *myImage; 
@property (nonatomic, retain) UIImage *img1; 
@property (nonatomic, retain) UIImage *img2; 
@property (nonatomic, retain) UIScrollView *scrollView; 

- (void)awakeFromNib; 
@end 
+0

Aber wie erstellen Sie 'myOverlayChannelPicker'? Hast du verifiziert, dass es nicht null ist? –

+0

Ich habe zu Header hinzugefügt: OverlayChannelPicker * myOverlayChannelPicker; und hinzugefügt Eigenschaft/synthetisieren dafür. Und dann rufe [self.view addSub ...] auf; – 1110

+0

Ich habe dies hinzugefügt, funktioniert aber immer noch nicht (es ist nicht NIL): - (IBAction) btnOk_Click { \t myOverlayChannelPicker = [[OverlayChannelPicker alloc] init]; \t if (myOverlayChannelPicker! = Null) { \t \t [self.view addSubview: myOverlayChannelPicker]; \t} } – 1110

Antwort

0

Sie wahrscheinlich den Anruf wie diese machen wollen:

[self.view addSubview:myOverlayChannelPicker]; 

Durch den Blick von geposteten Code Ich muss davon ausgehen, dass Sie noch keine objektive c-Entwicklung gemacht haben. Wenn das der Fall ist, sollten Sie wahrscheinlich hier Introduction to The Objective-C Programming Language beginnen, um die Grundlagen zu erhalten.

+0

Das klappt auch nicht. Selbst wenn ich selbst addSu eintippe, gibt es keinen Code für 'addSubview' :( – 1110

+0

Entschuldigung, ich postete zuerst ein fehlerhaftes Codebeispiel. –

+0

Immer noch nicht funktioniert :(Für objektive C rät ihr :) Ich komme aus C# Hintergrund, aber versuchen Sie es zu lernen :) – 1110