iOS 7 XCode 5.0 IBAction не вызывается

У меня есть приложение, разработанное в iOS4 с использованием XiB. У меня все хорошо работает с iOS6.1 и более ранними версиями. Но для некоторых кнопок IBAction не вызывается, если это iPhone и iOS 7.0. Также он отлично работает с iPad и iOS 7.0. Конечно, я использую разные Xib для iPhone и iPad. Вот код. Это довольно просто. Но только не вникнуть.

- (IBAction) didReceiveMapButtonPress {
   NSLog(@"IN DID RECEIVE MAP BUTTON PRESS");
   if ([self wasReferredFromMap]) {
    [[self navigationController] popViewControllerAnimated:YES];
   } else {
    [self pushMapViewController];
   }
  }

person Murali Patteboyina    schedule 23.09.2013    source источник
comment
Пожалуйста, проверьте связь с кнопкой еще раз или введите код кнопки...   -  person Hindu    schedule 23.09.2013
comment
Привет Кокс, Спасибо за ответ. Я думаю, что моя ссылка в порядке, потому что она работает с iOS 5.0, 5.1, 6.0 и 6.1.   -  person Murali Patteboyina    schedule 23.09.2013
comment
Можете ли вы опубликовать свой код для метода IBAction? так что я смогу понять проблему ...   -  person Hindu    schedule 23.09.2013
comment
Разве методы, связанные с XIB, не должны иметь параметр (id)sender?   -  person Mike D    schedule 25.09.2013


Ответы (3)


Многие разработчики использовали настраиваемое представление для отображения пользовательской ячейки в представлении таблицы для более старой версии iOS. Если вы один из них, то вам придется столкнуться с проблемой, что ваше действие по нажатию кнопки больше не будет работать с iOS7.

Как это решить:

У вас есть три варианта:

Вариант 1. Создайте новый макет с новой ячейкой таблицы вместо просмотра. и снова поместите все макеты в ячейку таблицы.

Я знаю, это потребует много усилий. Если вы не хотите этого делать, у нас есть для этого очень маленький лайфхак: вариант 2

Вариант 2. Создайте IBOutlet для своей кнопки и добавьте эту кнопку в качестве подпредставления представления содержимого вашей ячейки.

[self.myCell.contentView addSubview:self.btn_click];

Приведенная выше строка кода добавит btn_click в качестве подпредставления вашего представления контента. Теперь действие нажатия кнопки должно работать.

Вариант 3:

Лучший способ:

i) Возьмите выход UITableViewCell. ii) Сделать существующее представление в качестве подвида новой ячейки таблицы. iii) Отключите соединение пользовательской ячейки с существующим представлением и подключите ее к новому UITableViewCell.

вот и все, теперь ваш IBAction будет работать.

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

person Shreesh Garg    schedule 30.09.2013

Когда я столкнулся с этой проблемой, у меня были тонны ячеек от ксибов. Таким образом я создал категорию для UITableViewCell.

@implementation UITableViewCell (customs)

- (void)awakeFromNib {
    [super awakeFromNib];
    [self reAddSubviews];
}

- (void)reAddSubviews {
    for (UIView * o_vw in [[[self subviews] objectAtIndex:0] subviews]) {
        if (o_vw != self.contentView) {

            [o_vw removeFromSuperview];
            [self.contentView addSubview:o_vw];
        }
    }
}

@end
person Vov4yk    schedule 31.10.2013

Убедитесь, что файл TCell.xib для вашего UITableViewCell указан правильно.

Дважды проверьте, есть ли в этом xib-файле «Просмотр содержимого». Если вы не видите этот элемент, это означает, что ваш вид не UITableViewCell, скорее всего, это UIView.

Правильный метод — воссоздать этот файл XIB. вы можете сделать это следующим образом:

  1. Новый файл (пользовательский интерфейс) ---> Пустой ---> Семейство устройств (iphone) ---> Сохранить как TCell.xib.
  2. добавить UITableViewCell
  3. скопируйте свое подпредставление из предыдущего xib-файла в это представление и подключите розетки. https://i.sstatic.net/WB4j3.png
person river    schedule 14.10.2013