UIButton, созданный из массива строк, нуждается в цели - PullRequest
0 голосов
/ 13 февраля 2019

Вот оно: я работаю с устаревшим кодом.Так что я не могу реально (реально) изменить архитектуру на данном этапе.

У меня есть один файл, который создает массив строк, в VC1:

   NSMutableArray *arrButtons = [NSMutableArray array];
[arrButtons addObject:data];
[arrButtons addObject:share];
[VC2 showButtons:arrButtons];

Затем в моем коде VC2 у меня есть:

-(void)showButtons:(NSMutableArray *)arrButtons {
for (int i=0; i<arrButtons.count; i++) {
    UIButton *btn = [_popupView viewWithTag:i+5000];
    [btn setTitle:[arrButtons objectAtIndex:i] forState:UIControlStateNormal];
  //this is the code I am trying out, I just need to addtarget to data, not the rest of the array.  
    if ([arrButtons containsObject:data]) {

        //this is adding to all buttons, not just data. Figure out a way to add this action to only data. 
 btn.[index: data]
    [btn addTarget:self action:@selector(arrayButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
    }
}

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

Лучшее решение, которое я могу придумать, заключается в том, что мне нужно addTarget, но если у кого-то еще есть какие-либо указания или идеи о том, как что-то подобное можно решить, я был бы очень признателен.

ps Я знаю, как подключить IBActions от IB, проблема в том, что это кнопка, созданная на 100% программным способом, и при создании это действительно просто строка, а не кнопка.Так что addTarget недоступен.

1 Ответ

0 голосов
/ 13 февраля 2019

Я думаю, что проблема в VC2 заключается в:

if ([arrButtons containsObject:data]) {

Если я правильно понимаю, arrButons всегда будет содержать строку data .Предполагая, что data - это переменная, представляющая заголовок кнопки, к которой вы хотите добавить цель, я бы поставил вместо этого:

if ([arrButtons[i] isEqualToString: data]) {

Пожалуйста, дайте нам знать, как это происходит.

...