2012-03-01 85 views
0

我有一个UIView子类,它有一个框架/图像与按钮。我试图将它添加到我的视图控制器,但是当我这样做时显示,但没有按钮将注册任何触摸。iOS子视图中按钮没有响应触摸。

这是我的UIView子类。

#import "ControlView.h" 

@implementation ControlView 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     CGRect slideFrame = CGRectMake(0, 402, 320, 82); 
     slider = [[UIView alloc] initWithFrame:slideFrame]; 
     slider.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"shelf.png"]]; 
     [self addSubview:slider]; 

     UIImage *btnImage = [UIImage imageNamed:@"NavBar_01.png"]; 
     UIImage *btnImageSelected = [UIImage imageNamed:@"NavBar_01_s.png"]; 

     btnImage = [UIImage imageNamed:@"NavBar_01.png"]; 
     btnImageSelected = [UIImage imageNamed:@"NavBar_01_s.png"]; 
     btn1 = [UIButton buttonWithType:UIButtonTypeCustom]; 
     btn1.frame = CGRectMake(12, 28, 70, 50); 
     [btn1 setBackgroundImage:btnImage forState:UIControlStateNormal]; 
     [btn1 setBackgroundImage:btnImageSelected forState:UIControlStateSelected]; 
     [slider addSubview:btn1]; 
     [slider bringSubviewToFront:btn1]; 
     [btn1 addTarget:self action:@selector(home) forControlEvents:UIControlEventTouchUpInside]; 

     btnImage = [UIImage imageNamed:@"NavBar_02.png"]; 
     btnImageSelected = [UIImage imageNamed:@"NavBar_02_s.png"]; 
     btn2 = [UIButton buttonWithType:UIButtonTypeCustom]; 
     btn2.frame = CGRectMake(87, 28, 70, 50); 
     [btn2 setBackgroundImage:btnImage forState:UIControlStateNormal]; 
     [btn2 setBackgroundImage:btnImageSelected forState:UIControlStateSelected]; 
     [slider addSubview:btn2]; 
     [slider bringSubviewToFront:btn2]; 
     // [btn2 addTarget:self action:@selector() forControlEvents:UIControlEventTouchUpInside]; 

     btnImage = [UIImage imageNamed:@"NavBar_03.png"]; 
     btnImageSelected = [UIImage imageNamed:@"NavBar_03_s.png"]; 
     btn3 = [UIButton buttonWithType:UIButtonTypeCustom]; 
     btn3.frame = CGRectMake(162, 28, 70, 50); 
     [btn3 setBackgroundImage:btnImage forState:UIControlStateNormal]; 
     [btn3 setBackgroundImage:btnImageSelected forState:UIControlStateSelected]; 
     [slider addSubview:btn3]; 
     [slider bringSubviewToFront:btn3]; 
     // [btn3 addTarget:self action:@selector() forControlEvents:UIControlEventTouchUpInside]; 

     btnImage = [UIImage imageNamed:@"NavBar_04.png"]; 
     btnImageSelected = [UIImage imageNamed:@"NavBar_04_s.png"]; 
     btn4 = [UIButton buttonWithType:UIButtonTypeCustom]; 
     btn4.frame = CGRectMake(237, 28, 70, 50); 
     [btn4 setBackgroundImage:btnImage forState:UIControlStateNormal]; 
     [btn4 setBackgroundImage:btnImageSelected forState:UIControlStateSelected]; 
     [slider addSubview:btn4]; 
     [slider bringSubviewToFront:btn4]; 
     // [btn4 addTarget:self action:@selector() forControlEvents:UIControlEventTouchUpInside]; 

     UISwipeGestureRecognizer *recognizer; 

     recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(slideUp)]; 
     [recognizer setDirection:(UISwipeGestureRecognizerDirectionUp)]; 
     [self addGestureRecognizer:recognizer]; 

     recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(slideDown)]; 
     [recognizer setDirection:(UISwipeGestureRecognizerDirectionDown)]; 
     [self addGestureRecognizer:recognizer]; 

    } 
    return self; 
} 

-(void)slideUp 
{ 
    // Slide up based on y axis 
    CGRect frame = slider.frame; 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:.75]; 
    frame.origin.y = 320; 
    slider.frame = frame; 
    [UIView commitAnimations]; 
} 

-(void)slideDown 
{ 
    CGRect frame = slider.frame; 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:.75]; 
    frame.origin.y = 425; 
    slider.frame = frame; 
    [UIView commitAnimations]; 
} 
/* 
// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
- (void)drawRect:(CGRect)rect 
{ 
    // Drawing code 
} 
*/ 

@end 

这就是我将它添加到我的ViewController。

ControlView *cont = [[ControlView alloc]init]; 
    [homeView.view addSubview:cont]; 

我尝试添加相同的代码到一个视图控制器和按钮等工作,所以我敢肯定,这是简单的东西/愚蠢与代理/自拍等子视图和视图控制器之间,但是我有一个心理障碍。

回答

5

你正在做这个?

ControlView *cont = [[ControlView alloc]init]; 

你应该做的

ControlView *cont = [[ControlView alloc]initWithFrame:self.view.frame]; 
+1

你的先生是一个绅士和学者。完美的作品,我知道这是一个小/愚蠢的东西。 – KMG 2012-03-01 04:44:42

+0

实际上,现在我有了相反的...它添加的视图将不会注册与该代码的接触。 – KMG 2012-03-01 05:12:07