iPhone - Как динамически загружать / выгружать кнопки на экран - PullRequest
1 голос
/ 05 января 2011

Я пишу приложение, которое динамически загружает кнопки, а затем, на основании изменений в настройках приложения, предыдущие кнопки будут выгружены, а новые будут загружены.Есть ли лучшая практика для этого?Я сталкиваюсь с несколькими проблемами .. Я написал на другом форуме, но я не получил решение.Я изучаю документацию, но ключевая проблема заключается в том, что она не выгружает старые кнопки и не загружает новые.

Алгоритм, который я использую:

  1. В моем viewDidLoad ->вызовите reloadButtons (это позиционирует все кнопки в представлении)
  2. Когда пользователь вносит изменения в настройки приложения (в приложении), я вызываю: [self unloadButtons];[self reloadButtons];

Код:

- (void)reloadButtons 
{

  //some code

  xIncrement = 50; //for positioning buttons 
  yIncrement = 50;

  x = 25;
  y = 25;

  for (int i = 1; i <= numOfButtons; i++) {
    tmpButton = [[UIButton alloc] initWithFrame:CGRectMake(x, y, 50, 50)];

    x += xIncrement;
    if (i % 5 == 0) { //if this is the 6th button on the line then go to the next line (increment y)
       x = 25;
       y += yIncrement;
    }

    [tmpButton setTitle:@"title" forState:UIControlStateNormal];
    [tmpButton setTitleColor:[UIColor blackColor] forState: UIControlStateNormal];

    [tmpButton setFont:[UIFont boldSystemFontOfSize:24.0]];

    UIImage * bgImage = [UIImage imageNamed:@"image.png"];
    [tmpButton setBackgroundImage:bgImage forState:UIControlStateNormal];


    [tmpButton addTarget:self action:@selector(tapButton forControlEvents:UIControlEventTouchUpInside];
tmpButton.tag = i + 50;

    [self.view addSubview:tmpButton];

    [tmpButton release];

  } //for loop

  prevNumOfbuttons = numOfButtons; //saves the number of previous buttons since this may change depending on the user's choice in the application settings.

} //reloadButtons

Upon exit from the settings page, I run this unloadButtons function then follow it with the reloadButtons again.. this is where I'm running into the issues.. see my comments within the code below:

- (void)unloadButtons {

   NSLog(@"unloadButtons");

   NSArray *arrSubViews = [self.view subviews];
   int count = [arrSubViews count];

   for (int i = 0; i < count; i++) {
     UIView *vv = [arrSubViews objectAtIndex:i];

     if ([vv isMemberOfClass:[UIButton class]]) {
        NSInteger buttonTag = [vv tag];
        if (buttonTag < 200) { //all buttons that were added in reloadButtons have a tag < 200 - this is to distinguish them from the info button, which was assigned a tag of 203

           NSLog(@"Button Caption: %@", [vv currentTitle]);
           [vv removeFromSuperview];

        }

     }
   } //for loop

[arrSubViews release];

[self.view setNeedsDisplay]; //I added this to see if the reason that the old buttons are not going away is because the view is not refreshing

} //unloadButtons

Я ценю любую помощь !!

-Al

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...