2012-04-13 17 views
0

Ich versuche, eine Taste zu einem UIView hinzuzufügen, den gesamten Bereich der Ansicht zu decken .. wie folgt aus:Hinzufügen einer Schaltfläche in einem UIView

-(MBNHomeScreenButton*) initWithImage:(UIImage*)image 
       andHighlightedImage:(UIImage*)highlightedImage 
         andTitle:(NSString*)aTitle 
        withSelector:(SEL)actionButton 
         forDelegate:(UIViewController*)viewController{ 
self = [super init]; 
if (self) { 
    self.frame = CGRectMake(0, 0, 100, 120); 

    self.imageView = [[UIImageView alloc] initWithImage:image highlightedImage:highlightedImage]; 
    self.imageView.center = self.center; 
    self.imageView.frame = CGRectMake(10, 0, HS_BUTTON_IMAGE_WIDTH, HS_BUTTON_IMAGE_HEIGHT); 
    self.imageView.contentMode = UIViewContentModeScaleAspectFit; 
    self.imageView.highlighted = NO; 
    [self addSubview:self.imageView]; 

    self.title = [[UILabel alloc] initWithFrame:CGRectMake(0, HS_BUTTON_IMAGE_HEIGHT, HS_BUTTON_IMAGE_WIDTH + 20, 30)]; 
    self.title.text = aTitle; 
    self.title.textAlignment = UITextAlignmentCenter; 
    self.title.textColor = [UIColor whiteColor]; 
    self.title.backgroundColor = [UIColor clearColor]; 

    [self addSubview:self.title]; 

    // This creates a transparent button over the view 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    //button.backgroundColor = [UIColor redColor]; 
    [button setFrame:self.frame]; 
    [button addTarget:viewController action:actionButton forControlEvents:UIControlEventTouchUpInside]; 
    [self addSubview: button]; 
} 
return self;} 

Im Viewcontroller erstelle ich die Ansicht wie diese :

m_newsHSButton = [[MBNHomeScreenButton alloc] initWithImage:[UIImage imageNamed:NEWS_SHADED_IMAGE] 
             andHighlightedImage:[UIImage imageNamed:NEWS_HIGHLIGHTED_IMAGE] 
                andTitle:@"News" 
               withSelector:@selector(newsButtonPressed) 
               forDelegate:self]; 

m_newsHSButton.center = CGPointMake(m_backgroundView.frame.size.width/4, m_backgroundView.frame.size.height/4); 
[backgroundImgView addSubview:m_newsHSButton]; 

Noch ... die newsButtonPressed wird nicht aufgerufen.

Können Sie helfen? Danke!

==================== [bearbeiten] Ok ... fand es heraus .. Danke Jungs. Es war die Tatsache, dass ich versuche, die Ansicht als Subview eine UIImageView mit der letzten Zeile hinzufügen:

[backgroundImgView addSubview:m_newsHSButton]; 

Anscheinend wird es nicht berührt mehr bekommen.

Danke für die Mühe Jungs!

+0

Können Sie Ihre Methode newsButtonPressed zeigen? Ich habe gerade Ihren Code mit dem einfachen ViewController-Projekt ausprobiert und es funktioniert einwandfrei. Können Sie bestätigen, dass es die richtige Signatur hat: - (void) newsButtonPressed. –

+0

Es gibt viele Möglichkeiten, überprüfen Sie [diese Frage/Antwort] (http://stackoverflow.com/q/1731377/154803). Auch ich erinnere mich, dass alles Transparente (<0,1 Alpha) keine Berührungen erhält, also versuchen Sie es nicht mit '[UIColor colorWithWhite: 0.5 alpha: 0.11]' – progrmr

+0

Was ist der Wert von 'viewController', wenn Sie' addTarget 'tun? '? Könnten Sie 'self.viewController' verwenden? –

Antwort

0

Versuchen Sie, die Schaltfläche in Ihrer benutzerdefinierten Ansicht als @property- oder instance-Variable zu verwenden. Dann rufen Sie [m_newsHSButton.button addTarget:self action:actionButton forControlEvents:UIControlEventTouchUpInside]; von der ViewController.

+0

Danke! Ich habe das jetzt ausprobiert ... funktioniert nicht. – Fervus

Verwandte Themen