简体   繁体   中英

Showing buttons on the screen using a for-loop with Objective-C

I have a database full of words, and each word contains information. My job is to show the words on screen using buttons, and without using interface builder. I figured I could do this with a for loop, like this:

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

    UIButton *word= [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [word setTitle:@"Test" forState:UIControlStateNormal];
    [word setFrame:CGRectMake(0, 0, 100, 40)];
    [self.view addSubview:word];
}

this is all done in the viewDidLoad section. But when I run the program, only one button is showed, so how can I make it show all the 20 buttons? Thanks on forehand, Nicholas

It may be useful.

for (int i=0; i <=20; i++) 
    { 
        UIButton *word= [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [word setTitle:@"Test" forState:UIControlStateNormal]; 
        [word setFrame:CGRectMake(0, (i+1)*100, 100, 40)]; 
        [self.view addSubview:word]; 
    }

You should dynamically change the frame of the buttons added. The following code places the views horizontally.

float _width = 100;
float _x = i * _width;
[word setFrame:CGRectMake(_x, 100, _width, 40)];

Every time Button Frame is Similar .. so only 1 button is showe ..

Try like this

[word setFrame:CGRectMake(0+i*110, 0+i*50, 100, 40)];

or set frame as per your need

What you are doing here is adding all the 100 btns on the same frame. Instead of this, if you want to show all the 100 btns on the screen, you'll have to use two for loops.

for example, if you wanna show four btns in a single row then you should use,

 for(i = 0 ; i < 20 (i.e. no of elements in a single column) ; i++ )
 {
      for(j = 0; j < 4 (i.e. no of elements in a single row) ; j++)
      {
              UIButton *word= [UIButton buttonWithType:UIButtonTypeRoundedRect];
              [word setTitle:@"Test" forState:UIControlStateNormal]; 
              [word setFrame:CGRectMake(j*40, i*100, 100, 40)]; 
              [self.view addSubview:word]; 
      }
 }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM