Установка свойства на UIButton в цикле - PullRequest
1 голос
/ 27 февраля 2011

Я вращаюсь по кругу, чтобы лучше всего реализовать это, поэтому, может быть, вы мне поможете:

Как я могу сделать это, когда UIButton реагирует на селектор highlightImage, он также может установить желаемый challengeId = индекс моего appDelegate.availableArray?

В моем методе cellForRowAtIndexPath я создаю UIScrollView с кнопками:

scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, tv.frame.size.width, 78)];
    [scrollView setContentSize:CGSizeMake(500, 78)];

    [self createScrollButtons];

    [[cell contentView] addSubview:scrollView];

Мой createScrollButtons зацикливает и создает кнопки в scrollView и, таким образом, циклически изменяет количество элементов в моем availableArray

- (void) createScrollButtons
{
    SuperHeroGameAppDelegate *appDelegate = (SuperHeroGameAppDelegate *)[[UIApplication sharedApplication] delegate];

    int x = 0;
    int y = 0;
    NSLog(@"Challenge array = %@",appDelegate.availableArray);
    for (int i = 0; i < [appDelegate.availableArray count]; i++) {
        NSLog(@" ID= %d", [[[appDelegate.availableArray objectAtIndex:i]valueForKey:@"id"] intValue]);
        [self createButtonAtX:x AndY:y withChallenge:[[appDelegate.availableArray objectAtIndex:i]valueForKey:@"id"]];
        x += 90;
    }

}

createButtonAtX andY withChallenge is called for each element in availableArray`их правильное расположение вдоль scrollView.

- (void)createButtonAtX:(int) x AndY:(int) y withChallenge:(id)challengeId
{
    CGRect buttonRect = CGRectMake(x, y, 80, 78); 
    ChallengeButton *capeButton = [ChallengeButton buttonWithType:UIButtonTypeCustom];

    [capeButton setBackgroundColor:[UIColor clearColor]];
    [capeButton setFrame:buttonRect];

    [capeButton addTarget:self action:@selector(highlightImage:) forControlEvents:UIControlEventTouchUpInside];

    UIImage *capeImage = [UIImage imageNamed:@"CapePower.png"];
    [capeButton setBackgroundImage:capeImage forState:UIControlStateNormal];

    [scrollView addSubview: capeButton];
}

highlightImage вызывается как селектор каждой кнопки, чтобы определить, какая кнопка нажата.(и в идеале с элементом из availableArray, с которым связана эта кнопка) ... У меня есть подклассы UIButton и добавлено значение int, чтобы можно было вызывать [sender setChallengeId:]

- (void) highlightImage:(id)sender
{

    if([sender isSelected] == NO){
        [sender setSelected:YES];

        [sender setChallengeId:selectedChallenge];
        NSLog(@"sender = %d",[sender challengeId]);     
        UIImage *selectedImage = [UIImage imageNamed:@"PowerBarHand.png"];
        [sender setBackgroundImage:selectedImage forState:UIControlStateSelected];

    }
    else {
        [sender setBackgroundImage:[UIImage imageNamed:@"HandstandPower.png"] forState:UIControlStateNormal];   
        [sender setSelected:NO];
        selectedChallenge = 0;
    }
}

Моя проблемаЯ не могу понять, как получить элемент appDelegate availableArray В мое highlightImage, так как [capeButton addTarget:challengeId action:@selector(highlightImage:) forControlEvents:UIControlEventTouchUpInside] UIButton не позволит мне передать challengeId из цикла ранее в потоке.

Я могу передатьлюбое целочисленное значение для setChallengeId, и оно обрабатывается, как ожидается.Мне просто нужно получить значение appDelegate.availableArray id из цикла.

Любое направление было бы здорово! :)) 1042 *

1 Ответ

1 голос
/ 27 февраля 2011

Вы получаете availableArray в highlightImage: так же, как вы получаете в createScrollButtons:

SuperHeroGameAppDelegate *appDelegate = (SuperHeroGameAppDelegate *)[[UIApplication sharedApplication] delegate];

и затем получаете доступ к appDelegate.availableArray.

Я думаю, что это невопрос, который вы на самом деле хотели задать.Я думаю, что вы хотите, чтобы вызывать setChallengeId: на каждом ChallengeButton, как вы создаете его в createButtonAtX:AndY:withChallenge:.Тогда в highlightImage: сделайте selectedChallenge = [sender challengeId] вместо [sender setChallengeId:selectedChallenge].

...