У мене є кілька подань із кнопками на ньому. Всі ці подання пов'язані з одним ViewController, і в цьому ViewController у мене визначено IBOutlets для всіх цих 50 кнопок.
Щоб полегшити доступ до них, я зберігав усі кнопки UIB убагатовимірний NSMutableArray. Для тестування я дав усім кнопкам унікальний titleLabel. Кнопки UIB правильно зберігаються в масиві, я можу перевірити це за допомогою titleLabel.
Після натискання однієї кнопки я викликаю метод:
-(IBAction)pushButton:(id)sender
Там я порівнюю:
if ( [allButtonsArray objectAtIndex:1] == sender )
// do something
Незважаючи на те, що вибрана кнопка UIB із масиву та кнопка відправника мають однаковий titleLabel (що є унікальним у моєму випадку), твердження IF не відповідає дійсності.
Хто-небудь має ідею, чому?
Дякую, Пат
Відповіді:
0 для відповіді № 1ви пробували кидати їх як UIBкнопки?
if ( (UIButton *)[allButtonsArray objectAtIndex:1] == (UIButton *)sender )
або використовувати isEqual
метод замість ==
також, чому б не просто порівняти titleLabel
замість цього?
0 для відповіді № 2
Я просто вивожу UIButton за допомогою NSLog% @, який я порівнюю, і з'ясував, що така інформація, як "Frame", "непрозорий" "CALayer" тощо, однакова, АЛЕ:
Справжній ідентифікатор пам'яті, наприклад "UIRoundedRectButton: = x4b3f7f0", відрізняється Тому твердження IF ніколи не відповідає дійсності.
Що я зробив зараз, це призначив кожну кнопку UIB вInterface-Builder певне значення тегу (у розділі Перегляд). Цей тег може бути доступний за допомогою [тег відправника], і його можна легко порівняти з числовим масивом, щоб перевірити, яку кнопку було натиснуто.