2014-10-10 79 views
2

我在我的应用程序中创建83个动态按钮并为其设置标签。现在,我想为相同的设置自动布局。我怎样才能为此动态设置自动布局?如何在iOS中为多个动态按钮和labell设置自动布局?

这是我创建按钮和标签动态的实现代码:

-(void)DynamicButton 
{ 
    //Reading Data From database 
    NSMutableArray *objectName = [[NSMutableArray alloc] init]; 
    NSArray *docPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentDir = [docPaths objectAtIndex:0]; 
    self.databasePath = [documentDir stringByAppendingPathComponent:@"SMS.sqlite"]; 

    FMDatabase *database = [FMDatabase databaseWithPath:self.databasePath]; 
    [database setLogsErrors:TRUE]; 
    [database open]; 

    //FMResultSet *results = [database executeQuery:@"SELECT * FROM SMSCategory"]; 
    NSString *anQuery = [[NSString alloc]initWithFormat:@"SELECT *FROM SMSCategory"]; 

    FMResultSet *results = [database executeQuery:anQuery]; 

    while ([results next]) { 
     SMSCat1 *cat = [[SMSCat1 alloc]init]; 
     cat.Id = [results stringForColumn:@"Id"]; 
     cat.Name = [results stringForColumn:@"Name"]; 
     cat.IsActive = [results stringForColumn:@"IsActive"]; 
     [objectName addObject:cat]; 
    } 
    [database close]; 


    //Adding dynamic buttons 


    int yPossion = 150, xPossion = 44; int temp = 0; 
    UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:self.view.frame]; 
    [self.view addSubview:scrollView]; 
    for (int i = 0; i < [objectName count]; i++) { 
     SMSCat1 *cat = [objectName objectAtIndex:i]; 

     UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [aButton setTranslatesAutoresizingMaskIntoConstraints:YES]; 


     //Label Dynamic Code 

     UILabel *label = [[UILabel alloc] init]; 
     [label setText:cat.Name]; 
     [label setTextColor:[UIColor brownColor]]; 
     label.font = [UIFont systemFontOfSize:12]; 

     [label sizeToFit]; 

     [label setFrame:CGRectMake(5, 44, 70, 60)]; 
     [scrollView addSubview:label]; 
     [aButton addSubview:label]; 





     [aButton setBackgroundColor:[UIColor blackColor]]; 
     [aButton setBackgroundImage:[UIImage imageNamed:@"icon-menu.png"] forState:UIControlStateNormal]; 

     [aButton setTitle:[NSString stringWithFormat:@"%d", i] forState:UIControlStateNormal]; 

     [aButton setFrame:CGRectMake(xPossion, yPossion, 70, 60)]; 
     aButton.highlighted = YES; 

     [scrollView addSubview:aButton]; 

     xPossion += aButton.frame.size.width + 35; 
     temp++; 
     if (temp == 3) { 
      yPossion = aButton.frame.origin.y + aButton.frame.size.height + 20; 
      temp = 0; 
      xPossion = 44; 
      yPossion += aButton.frame.size.width - 15; 
      [scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, yPossion - 50)]; 
     } 
    } 
} 
+0

我想设置为动态多个按钮 – 2014-10-10 09:33:08

回答

0

使用自动布局这个你要设置setTranslatesAutoresizingMaskIntoConstraints:NO。这使您可以使用自己的约束来设置对象的位置。使用自动布局放置对象时,您并不关心框架。您想要将对象相对于其周围的对象或其父视图放置。例如,你可以做这样的事情:

NSDictionary* views = @{@"label1":label1,@"button1":button}; 
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[label1]-(10)-[button1]" options:0 metrics:nil views:views]]; 
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:label attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:button attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0]]; 

这将分开设置的两个要素10个像素,垂直居中他们。我不会通过你的代码,并将其全部更改为自动布局,但你在我的示例中看到如何开始用自动布局布局对象

+0

自动布局,如果你知道该怎么做,请告诉我...... – 2014-10-10 09:54:05

+0

但如何为多个动态按钮设置? – 2014-10-17 09:57:33

0

for(int i = 0; i < [list count]; i ++)

id val=[list objectAtIndex:i]; 
    CGFloat val1=[val floatValue]; 
    UILabel *newLabel = [[UILabel alloc] initWithFrame:CGRectMake(x, 0,107,40)]; 
    newLabel.text=[NSString stringWithFormat:@"%@",list[i]]; 
    newLabel.textAlignment = NSTextAlignmentCenter; 
    newLabel.backgroundColor = [UIColor greenColor]; 
    newLabel.layer.borderColor = [UIColor whiteColor].CGColor; 
    newLabel.layer.borderWidth = 2; 
    [self.view addSubview:newLabel]; 
    x=x+newLabel.frame.size.width; 
+0

用于循环和使用X ..设置大小。它的工作很好。 – 2016-07-28 08:40:44