2010-12-09 26 views

Répondre

3

Une option simple sans utiliser drawrect est de simplement mettre un mince UIView entre les deux boutons. Définissez la couleur d'arrière-plan de la vue sur la couleur de ligne souhaitée.

Edit:
Vous pouvez toujours utiliser UIViews minces et passer leur visibilité au besoin.
Si vous souhaitez toujours dessiner les lignes, vous pouvez créer un UIView personnalisé.

@interface CustomView : UIView { 
    UIButton *button1; 
    UIButton *button2; 
} 
@end 

@implementation CustomView 

- (id) initWithFrame:(CGRect)frame { 
    if (self = [super initWithFrame:frame]) { 
     UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
     btn1.frame = CGRectMake(20, 5, 80, 30); 
     [btn1 setTitle:@"Button1" forState:UIControlStateNormal]; 
     [btn1 addTarget:self action:@selector(buttonPressed:) 
       forControlEvents:UIControlEventTouchUpInside]; 
     button1 = btn1; 
     [self addSubview:btn1]; 

     UIButton *btn2 = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
     btn2.frame = CGRectMake(20, 60, 80, 30); 
     [btn2 setTitle:@"Button2" forState:UIControlStateNormal]; 
     [btn2 addTarget:self action:@selector(buttonPressed:) 
       forControlEvents:UIControlEventTouchUpInside]; 
     button2 = btn2; 
     [self addSubview:btn2]; 
    } 
    return self; 
} 

-(void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    if (button1.selected) 
     CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1.0); 
    else 
     CGContextSetRGBStrokeColor(context, 0.0, 1.0, 0.0, 1.0); 
    CGContextSetLineWidth(context, 1.0); 
    CGContextBeginPath(context); 
    CGContextMoveToPoint(context, 10.0, 45.0); 
    CGContextAddLineToPoint(context, 150.0, 45.0); 
    if (button1.selected) 
    { 
     CGContextAddLineToPoint(context, 180.0, 35.0);  
    } 
    CGContextDrawPath(context, kCGPathStroke); 
} 

-(void)buttonPressed:(UIButton *)button 
{ 
    button1.selected = !button1.selected; 
    button2.selected = !button2.selected; 
    [self setNeedsDisplay]; 
} 

@end 
+0

C'est une bonne option, mais je veux dessiner la ligne en parties. Fondamentalement, une partie de la ligne est dessinée quand un bouton est dans l'état sélectionné et l'autre dans l'état normal sinon il n'est pas dessiné, et l'autre partie reste telle quelle. Idem pour l'inverse – Nishit

+0

Mise à jour de l'exemple avec quelque chose de plus proche de votre description. – Anna

+0

Merci pour l'exemple, je pense que cela va faire. Si j'ai de la difficulté, je le commenterai, sinon je le marquerai comme la réponse. Encore une fois merci. – Nishit