2016-07-22 16 views
1

Ich möchte dynamisch einige Tasten generieren, die Zahl wird durch den Hintergrund gegeben. Wenn ich es bekomme, muss ich es verwenden, um die entsprechenden Zahlentasten zu erstellen, jede Schaltfläche wird die gleiche Größe haben und der Abstand zwischen ihnen ist gleich, wenn die Schaltfläche nicht in einer Zeile enthalten ist, wird es Zeilenvorschub. Die minimale Breite ist eine Konstante, aber die tatsächliche Länge entspricht dem Titeltext der Schaltfläche. Mein Code ist unten, aber es kann nicht Zeilenvorschub, auch ich weiß nicht, wie man den Text verwendet, um die Länge der Taste zu bestimmen, dankbar für jede Anleitung.Dynamic generate buttons

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    CGFloat testHeight = 50; 
    CGFloat testWidth = 100; 
    CGFloat spaceing = 10; 
    int number = 5; 

    for (int i = 0; i < number; i++) { 
     UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(spaceing + testWidth * i + spaceing * i , 100 , testWidth, testHeight)]; 
     [button setBackgroundColor:[UIColor redColor]]; 
     [self.view addSubview:button]; 
    } 
} 
+0

was Sie suchen, eine „Grid von Schaltflächen“ Suche nach dem ist. – vikingosegundo

Antwort

0

Sie könnten ein UICollectionView, dies zu tun verwenden, aber es ist einfach zu implementieren, nicht schwierig, eine Reihe von UIButtons verwenden. Sie können sizeToFit verwenden, um die Schaltflächengröße basierend auf ihrem Titel selbst zu bestimmen. Um Ihre Schaltflächen zu umbrechen, sollten Sie nur überprüfen, ob sie sich über das maximale x der Ansicht hinaus erstrecken, in der Sie sie hinzufügen, in Ihrem Fall self.view.

Zum Beispiel könnten Sie etwas sagen wie:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    NSArray *buttonStrings = @[@"how", @"now", @"brown", @"cow", @"the", @"quick", @"brown", @"fox"]; 
    NSMutableArray *buttons = [[NSMutableArray alloc]initWithCapacity:[buttonStrings count]]; 
    for (NSString *string in buttonStrings) 
    { 
     UIButton *button = [self buttonForString:string]; 
     [buttons addObject:button]; 
    } 
    [self layoutButtonArray:buttons inView: self.view]; 
} 
// takes an array of buttons and adds them as subviews of view 
- (void)layoutButtonArray:(NSArray<UIButton *> *)buttons inView:(UIView *)view 
{ 
    CGFloat spacing = 10.0; 
    CGFloat xOffset = spacing; 
    CGFloat yOffset = spacing; 
    for (UIButton *button in buttons) 
    { 
     if((xOffset + button.bounds.size.width + spacing) > CGRectGetMaxX(view.bounds)) 
     { 
      xOffset = spacing; 
      yOffset += (button.bounds.size.height + spacing); 
     } 
     button.frame = CGRectMake(xOffset, yOffset, button.bounds.size.width, button.bounds.size.height); 
     [view addSubview:button]; 
     xOffset += (button.bounds.size.width + spacing); 
    } 
} 
// Takes a string returns a button sized to fit 
- (UIButton *) buttonForString:(NSString *)string 
{ 
    UIButton *button = [[UIButton alloc]initWithFrame:CGRectZero]; 
    button.backgroundColor = [UIColor redColor]; 
    [button setTitle:string forState:UIControlStateNormal]; 
    [button sizeToFit]; 
    // if you want to have a minimum width you can add that here 
    button.frame = CGRectMake(button.frame.origin.x, button.frame.origin.y, MAX(button.frame.size.width, kMinWidth), button.frame.size.height); 
    return button; 
}