2015-08-13 1 views
2

Пожалуйста, проверьте мой код:Тэг кнопки не работает с динамическим значением в цикле?

for (i = 0; i < fifth_img.count; i++) 
{ 
    UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    aButton.frame  = CGRectMake(xCord, yCord + space,buttonWidth,buttonHeight); 
    [aButton addTarget:self action:@selector(whatever1:) forControlEvents:UIControlEventTouchUpInside]; 
    [aButton setTitle:[NSString stringWithFormat:@"%d",(int)i] forState:UIControlStateNormal]; 
    aButton.titleLabel.font = [UIFont systemFontOfSize:0.0]; 

    aButton.tag = i; 
    [aButton setBackgroundImage:[UIImage imageNamed:[fifth_img objectAtIndex:i]] forState:UIControlStateNormal]; 
    [seasonsScrollView addSubview:aButton]; 
    yCord += buttonHeight + space; 
} 
[seasonsScrollView setContentSize:CGSizeMake(Vu_leftPanel.frame.size.width, yCord)]; 
[Vu_leftPanel addSubview:seasonsScrollView]; 


for(int b=0; b<6; b++){ 
    [(UIButton *)[Vu_leftPanel viewWithTag:b] setBackgroundImage:[UIImage imageNamed:[fifth_img objectAtIndex:b]] forState:UIControlStateNormal]; 
} 

Когда я ставлю 5 или 3 или 1 в viewWithTag: 5 он работает, но когда я ставлю только б, сбой приложения.

+0

Я также пробовал (длинный) b –

+1

Не могли бы вы предоставить больше кода? –

+1

Что печатается в консоли при сбое? –

ответ

1
int xCord = 0; 
    int yCord = 0; 
    int space = 5; 
    int buttonWidth = 25; 
    int buttonHeight = 25; 
    for (int i = 0; i < 5; i++) 
    { 
     UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
     aButton.frame  = CGRectMake(xCord, yCord + space,buttonWidth,buttonHeight); 
     [aButton addTarget:self action:@selector(whatever1:) forControlEvents:UIControlEventTouchUpInside]; 

     [aButton setTitle:[NSString stringWithFormat:@"%d",(int)i] forState:UIControlStateNormal]; 
     aButton.titleLabel.font = [UIFont systemFontOfSize:0.0]; 

     aButton.tag = 1000 + i; 
     [aButton setTitle:[NSString stringWithFormat:@"%i",1000 + i] forState:UIControlStateDisabled]; 
     [aButton setBackgroundImage:[UIImage imageNamed:[fifth_img objectAtIndex:i]] forState:UIControlStateNormal]; 
     [seasonsScrollView addSubview:aButton]; 
     yCord += buttonHeight + space; 
    } 
for(int b=0; b<6; b++){ 
     [(UIButton *)[Vu_leftPanel viewWithTag:1000 - b] setBackgroundImage:[UIImage imageNamed:[fifth_img objectAtIndex:b]] forState:UIControlStateNormal]; 
    } 
+0

Вы удалили строку тега в тексте выше? просто замените i i + 1 в вышеописанном цикле и viewWithTag: b + 1 в цикле выдувания ..., который сработал –

+0

@NasirKhan Я обновляю код –

+0

@NasirKhan никогда не использовать начало тега с 0, если вы создаете любой длинный int как значение начала тега, то это значительно упрощает теги представления. –

3

Убедитесь, что Vu_leftPanel не имеет какой-либо другой вид с тегом от 0 до 6 [Как тег по умолчанию для взглядов 0]. Поскольку setBackgroundImage: forState: метод можно вызвать только в UIButton. Если какой-либо другой вид получает этот вызов метода, приложение будет сбой с непризнанным селектором, отправленным в исключение экземпляра.

Попробуйте установить теги от 1000 до 1006. Затем попробуйте установить фоновое изображение.

+0

Хороший ответ, может быть, вам следует уточнить, что значение тега по умолчанию по умолчанию равно 0. Поэтому viewWithTag: 0 не обязательно возвращает UIButton. –

+0

@AliAB. сделано: P;) :) –