Одна кнопка UIB одновременно - PullRequest
0 голосов
/ 06 августа 2010

Вот код, с которым я играл;по какой-то причине я не могу заставить его создавать по одной кнопке за раз.Например, у вас есть;for (i = 1; i <= 12; i ++) должно означать, что при каждом нажатии внешней кнопки создается новая, пока не будет создано 12 кнопок.Тогда должно быть ai = 12; где-то сломаться.Однако я не могу заставить этот цикл работать.Любая помощь будет принята с благодарностью. </p>

// Где мы размещаем кнопку на оси Y в позиции экрана float startPositionY = 70.0;

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

    NSString *button = [NSString stringWithFormat:@"button%i", i];

        // NSMutableString version to keep button from changing name.
        //NSString *button = [NSMutableString stringWithFormat:@"button%i", i];

    UIButton *tempBName = (UIButton *)[UIButton buttonWithType:UIButtonTypeRoundedRect];
    [tempBName setTitle:button forState:UIControlStateNormal];
    tempBName.tag = i;
    [tempBName addTarget:self action:@selector(clickMe:)forControlEvents:UIControlEventTouchUpInside];
    tempBName.frame = CGRectMake(0.0, 0.0, 80.0, 50.0);
    tempBName.center = CGPointMake(160.0, 50.0+startPositionY);
    tempBName.titleLabel.adjustsFontSizeToFitWidth = TRUE;
    [self.view addSubview:tempBName];

        // Make space between each button
    startPositionY += 70;

        // How many buttons out of "i" are we creating?
    NSLog(@"%d", i);

        // release button
    [button release];
}
    // Was the button Pressed?
NSLog(@"Did Press");
    // Did our Position change on the Y-axis?
NSLog(@"%f", startPositionY);

Спасибо,

Ответы [ 3 ]

1 голос
/ 06 августа 2010

Почему бы вам просто не удалить петлю for? Если вам нужна только одна кнопка, а не четыре, нет необходимости запускать код четыре раза ...

0 голосов
/ 06 августа 2010

Ну, с этим все в порядке, я чувствую себя так глупо. Я чуть было не вчера и бросил мяч. Итак, просто напоследок - окончательный полный код для всех:

Что делает этот код? Это позволяет создавать одну кнопку для каждого клика.

[h файл]: * ​​1005 *

@interface testMButton1ViewController : UIViewController {
    UIButton *addButton;
}
@property (nonatomic, retain) IBOutlet UIButton *addButton;
@property NSInteger buttonCount;
- (IBAction)addButton:(id)sender;

[файл m]:

@synthesize addButton;
@synthesize buttonCount;

(IBAction)addButton:(id)sender {

    float startPositionY = 60.0;

    if (buttonCount == 6) return;
    buttonCount += 1;

    UIButton *tempBName = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [tempBName setTitle:[NSString stringWithFormat:@"button%i", buttonCount] forState:UIControlStateNormal];
    tempBName.tag = buttonCount;
    [tempBName addTarget:self action:@selector(clickMe:)forControlEvents:UIControlEventTouchUpInside];
    tempBName.frame = CGRectMake(0.0, 20.0+(startPositionY*buttonCount), 80.0, 50.0);
    tempBName.center = CGPointMake(160.0, 20.0+(startPositionY*buttonCount));
        // Removed the line setting the center, and move the positioning to the frame above
    tempBName.titleLabel.adjustsFontSizeToFitWidth = TRUE;
    [self.view addSubview:tempBName];
    NSLog(@"%d", buttonCount);
}

Особая благодарность Run Loop за всю тяжелую работу, чтобы заставить это работать.

0 голосов
/ 06 августа 2010

Вы чрезмерно отпускаете каждую кнопку, из-за чего она исчезает из поля зрения. Когда вы создаете кнопку с помощью [UIButton buttonWithType ...], она добавляется в пул автоматического выпуска, и у вас нет права собственности на нее. Когда вы добавляете его в представление, его счетчик приращений увеличивается на 1, давая вам право владения, но затем вы снова отпускаете его с помощью [кнопки выпуска]. Удалите строку [кнопка выпуска] и все должно быть хорошо.

Я настоятельно рекомендую вам прочитать Руководство по программированию управления памятью Apple.

Я переписал ваш код, переместив создание кнопки в метод, который вы должны вызывать при каждом нажатии кнопки добавления. Вам также необходимо объявить переменную NSInteger с именем buttonCount в файле заголовка (.h).

- (void)addButton {

        if (buttonCount == 4) return;
        buttonCount += 1;

        UIButton *tempBName = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [tempBName setTitle:[NSString stringWithFormat:@"button%i", buttonCount]; forState:UIControlStateNormal];
        tempBName.tag = buttonCount;
        [tempBName addTarget:self action:@selector(clickMe:)forControlEvents:UIControlEventTouchUpInside];
        tempBName.frame = CGRectMake(0.0, 50.0+(startPositionY*buttonCount)), 80.0, 50.0);
        // Removed the line setting the center, and move the positioning to the frame above
        tempBName.titleLabel.adjustsFontSizeToFitWidth = TRUE;
        [self.view addSubview:tempBName];
   }
...