2017-04-21 3 views
1

J'ai deux colonnes d'étiquettes avec un texte. Comment puis-je obtenir la 3ème colonne de l'étiquette attachée à la colonne 1 quand je touche sur l'étiquette de ma deuxième colonne. Voici le code pour colonne1 et étiquettes Colonne2Comment positionner cinq copies d'une étiquette par rapport à l'autre étiquette avec contact dans l'objectif c

Column1 étiquettes

for(int i=0;i<length;i++) 
{ 


    _lbl = [[UILabel alloc]initWithFrame:rect1]; 
    // lbl.frame=CGRectMake(x, y, width+10, 30); 
    _lbl.center = CGPointMake(x, y); 
    _lbl.tag=i; 
    _lbl.textAlignment=NSTextAlignmentCenter; 
    _lbl.backgroundColor=[UIColor blueColor]; 
    _lbl.textColor=[UIColor whiteColor]; 
    _lbl.font = [UIFont fontWithName:@"Verdana-Bold" size:17.0]; 
    //label.clipsToBounds=YES; 
    //label.layer.cornerRadius=5.0; 
    [self.gameLayer addSubview:_lbl]; 
    _lbl.userInteractionEnabled = YES; 
    [email protected]"Text1"; 
    [_lbl sizeToFit]; 

Colonne2 pour les étiquettes

for(int i=0;i<length;i++) 
{ 


    _lbl2 = [[UILabel alloc]initWithFrame:rect]; 
    // _lbl2.frame=CGRectMake(x, y, width+10, 30); 
    _lbl2.center = CGPointMake(x+20, y); 
    _lbl2.tag=i+5; 
    _lbl2.textAlignment=NSTextAlignmentCenter; 
    _lbl2.backgroundColor=[UIColor greenColor]; 
    _lbl2.textColor=[UIColor whiteColor]; 
    _lbl2.font = [UIFont fontWithName:@"Verdana-Bold" size:17.0]; 
    //_lbl2.clipsToBounds=YES; 
    //_lbl2.layer.cornerRadius=5.0; 
    [self.gameLayer addSubview:_lbl2]; 
    _lbl.userInteractionEnabled = YES; 
    [email protected]"Text2"; 
    [_lbl2 sizeToFit]; 

En touche Begin méthode que j'appelle une méthode makeThirdColumn

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 

     { 
     CGPoint pt = [[touches anyObject] locationInView:self.superview]; 
     _xOffset = pt.x - self.center.x; 
     _yOffset = pt.y - self.center.y; 
     [self makeThirdColumn]; 

I, Je ne reçois pas la 3ème colonne d'étiquettes à la position requise dans cette image que deux colonnes sont enter image description here

Je veux concate 3ème colonne avec l'étiquette colonne1 de Texte1.

+0

Sur la base de votre code ... Tout d'abord, vous créez 5 étiquettes sans texte, de sorte que des rectangles verts plaine, tout au-dessus de l'autre, de sorte que le résultat est l'un boîte verte. Deuxièmement, vous faites la même chose avec 5 étiquettes rouges, les unes sur les autres, ce qui donne une boîte rouge. Troisièmement, vous créez 5 étiquettes, chaque fois au réglage de l'image, puis en changeant l'origine du cadre, puis en changeant tout le cadre, encore une fois tous les uns sur les autres. De plus ... vous ne créez pas de références aux étiquettes que vous ajoutez, donc en « faire la troisième rangée » il n'y a pas label1 ou label2. – DonMag

+0

Je suggère --- Première étape: écrire du code qui crée correctement vos deux premières « lignes » d'étiquettes.Ensuite, éditez votre question en montrant * ce * code, plus une image de son apparence et montrant où vous voulez que la 3ème rangée d'étiquettes apparaisse. – DonMag

+0

oh je le vois laissez-moi mettre à jour mon code – Flying

Répondre

0

@Moon - Je ne suis toujours pas tout à fait sûr de ce que vous essayez de faire, mais j'espère que cela vous aidera sur votre chemin. Pour essayer de le rendre un peu plus clair, j'ai utilisé les colonnes A, B et C au lieu de 1, 2 et 3. C'est le résultat - les étiquettes rouges de la "Colonne C" s'afficheront ou se cacheront lorsque vous taperez sur les étiquettes "Colonne B" grises.

enter image description here

Si cela ne fait pas ce que vous voulez (ou si vous ne pouvez pas savoir comment faire ce faire ce que vous voulez), vous devez être beaucoup plus clair pour décrire votre objectif.


// LabelColumnsViewController.h 

#import <UIKit/UIKit.h> 

@interface LabelColumnsViewController : UIViewController 

@end 

// LabelColumnsViewController.m 

#import "LabelColumnsViewController.h" 

@interface LabelColumnsViewController() 

@property (strong, nonatomic) UIView *gameLayer; 

@property (strong, nonatomic) NSMutableArray *columnA; 
@property (strong, nonatomic) NSMutableArray *columnB; 
@property (strong, nonatomic) NSMutableArray *columnC; 

@end 

@implementation LabelColumnsViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // add a UIView to hold the Labels 
    _gameLayer = [[UIView alloc] initWithFrame:self.view.frame]; 
    _gameLayer.backgroundColor = [UIColor orangeColor]; 
    [self.view addSubview:_gameLayer]; 

    // initialize arrays to hold references to the labels 
    _columnA = [NSMutableArray array]; 
    _columnB = [NSMutableArray array]; 
    _columnC = [NSMutableArray array]; 

    // set rows to 5 
    int length = 5; 

    // top of top row 
    CGFloat y1 = 100.0; 

    // left of Column A 
    CGFloat x1 = 20.0; 

    // left of Column B 
    CGFloat x2 = 220.0; 

    // Vertical spacing for rows of labels 
    CGFloat yInc = 40.0; 

    // initialize a CGRect 
    CGRect rect1 = CGRectMake(x1, y1, 100, 30); 

    for (int i = 1; i < length; i++) 
    { 

     // Create UILabel for Column A 
     UILabel *lblA = [[UILabel alloc] initWithFrame:rect1]; 
     lblA.tag = 100+i; 
     lblA.textAlignment = NSTextAlignmentCenter; 
     lblA.backgroundColor = [UIColor blueColor]; 
     lblA.textColor = [UIColor whiteColor]; 
     lblA.font = [UIFont fontWithName:@"Verdana-Bold" size:17.0]; 
     [self.gameLayer addSubview:lblA]; 
     lblA.userInteractionEnabled = YES; 
     [email protected]"Text1"; 
     [lblA sizeToFit]; 


     // "move" the rectangle, so the next label starts at column B 
     rect1.origin.x = x2; 

     // Create UILabel for Column B 
     UILabel *lblB = [[UILabel alloc] initWithFrame:rect1]; 
     lblB.tag = 200+i; 
     lblB.textAlignment = NSTextAlignmentCenter; 
     lblB.backgroundColor = [UIColor grayColor]; 
     lblB.textColor = [UIColor whiteColor]; 
     lblB.font = [UIFont fontWithName:@"Verdana-Bold" size:17.0]; 
     [self.gameLayer addSubview:lblB]; 
     lblB.userInteractionEnabled = YES; 
     [email protected]"Text2"; 
     [lblB sizeToFit]; 

     // add a Tap Gesture Recognizer to the label 
     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(gotTapped:)]; 
     [lblB addGestureRecognizer:tap]; 


     // "move" the rectangle, so the next label starts at column C 
     // this is the right-edge of the Column A label 
     rect1.origin.x = lblA.frame.origin.x + lblA.frame.size.width; 

     // Create UILabel for Column C 
     UILabel *lblC = [[UILabel alloc] initWithFrame:rect1]; 
     lblC.tag = 300+i; 
     lblC.textAlignment = NSTextAlignmentCenter; 
     lblC.backgroundColor = [UIColor redColor]; 
     lblC.textColor = [UIColor whiteColor]; 
     lblC.font = [UIFont fontWithName:@"Verdana-Bold" size:17.0]; 
     [self.gameLayer addSubview:lblC]; 
     lblC.userInteractionEnabled = YES; 
     [email protected]"Text3"; 
     [lblC sizeToFit]; 

     // Column C is initially Hidden 
     lblC.hidden = YES; 


     // add the labels to their Arrays so we can access them later 
     [_columnA addObject:lblA]; 
     [_columnB addObject:lblB]; 
     [_columnC addObject:lblC]; 


     // reset left of rect to Column A, and increment y (for next row) 
     rect1.origin.x = x1; 
     rect1.origin.y += yInc; 

    } 

} 

- (void) gotTapped:(id)sender { 
    // a label in Column B was tapped, so show Column C labels if they were hidden, 
    //  or hide them if they were visible 
    for (UILabel *v in _columnC) { 
     v.hidden = !v.hidden; 
    } 
} 

@end 
+0

vous avez raison, mais il résout mon problème demi .mon problème est de savoir comment Je rends les étiquettes cloumnC identiques aux étiquettes ColumnB. supposons que mes étiquettes columnB ont des chaînes de rendu et sa taille en fonction du texte puis comment je génère la même taille d'étiquettes dans ColumnC lorsque je tape sur n'importe quelle étiquette dans columnB – Flying

0
  1. Créez un gestureRecognizer et ajoutez-le à la vue gameLayer.
  2. Mettre en œuvre la méthode cible func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool

  3. Vous pouvez déterminer l'étiquette de la seconde colonne en définissant par exemple d'étiquette spéciale. (Pour la première colonne i + 1000, la deuxième colonne i + 2000, etc.)

  4. si (gestureRecognizer.view.tag - 2000> 0) alors ceci est la deuxième colonne et vous obtiendrez l'étiquette correspondante de la première colonne, puis vous créez un nouveau étiquette de troisième colonne aussi bien.

Une question? Commentaire.