Имам проект, който има 35 бутона:
IBOutlet UIButton *button1;
IBOutlet UIButton *button2;
IBOutlet UIButton *button3;
...
IBOutlet UIButton *button35;
В моя случай създавам функция, която ще избере число от 0 до 35, и се опитвам да избера бутона според генерирания брой, както виждаме по-долу:
int x = arc4random() % 35;
button[x].layer.borderColor = [[UIColor darkGrayColor] CGColor];
Но кодът не работи, защото вярвам, че това не е начин да избера бутона, как мога да разреша този проблем и да избера бутона и да променя цвета на рамката?
Отговори:
1 за отговор № 1Предлагам да присвоите последователни маркери на бутоните си, като започнете с определен фиш и след това с помощта на viewWithTag, за да извлечете бутоните, както е предложено в алтернативното предложение на DanielM.
#define K_TAG_BASE 100 //BUTTON TAGS START AT 100
int tag = arc4random() % 35 + K_TAG_BASE;
NSButton aButton = [self.view viewWithTag: tag];
aButton.layer.borderColor = [[UIColor darkGrayColor] CGColor];
1 за отговор № 2
Можете да зададете полето за тагове на всеки бутон и да потърсите бутона на базата на маркера:
int x = arc4random() % 35;
UIButton * desiredButton = (UIButton *)[self.view viewWithTag:x];
desiredButton.layer.borderColor = [[UIColor darkGrayColor] CGColor];
Можете също да използвате IBOutletCollection в тази ситуация, за да избегнете 35 дефиниции на бутони:
IBOutletCollection(UIButton) NSArray * _buttonsArray;
0 за отговор № 3
Тъй като ви виждам, че сте настроили бутоните с изводи, предлагам също да дефинирате IBOutletCollection
собственост и използване, за да вземете произволен бутон (в колекциите за продажба поръчката не е гарантирана, но нямате нужда от нея за случайна селекция):
// In your class @interface
@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *buttonsArray;
// In your class @implementation
-(void)selectRandomButton
{
NSInteger randomIndex = arc4random() % self.buttonsArray.count;
((UIButton *)self.buttonsArray[randomIndex]).layer.borderColor = [UIColor darkGrayColor].CGColor;
}