добавлена ​​кнопка в uitableviewcell, не отвечающая

Я создал пользовательскую ячейку tableviewcell через конструктор интерфейса с меткой и кнопкой. В файле .h и .m я сделал выходы и действия для кнопки, которую я подключил. Эта ячейка добавляется в табличное представление, управляемое классом uiviewcontroller. Однако моя проблема в том, что когда я нажимаю кнопку, кнопка не активируется, однако я перехожу к подробному представлению, принадлежащему ячейке. Вроде как кнопка находится за ячейкой.

Любые предложения для того, что я забыл или должен изменить?

Я создал кнопку программно и вместо этого добавил в ячейку в качестве подвида, и это работает, однако это дает мне еще одну проблему, поскольку кнопка добавляется каждый раз, когда загружается ячейка.

 UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setFrame:CGRectMake(200.0f, 5.0f, 100.0f, 40.0f)];


//Set image
UIImage *img = [UIImage imageNamed:@"myPackage.png"];
[button setImage:img forState:UIControlStateNormal];
[img release];


[button addTarget:self action:@selector(myPackagePushed:) forControlEvents:UIControlEventTouchUpInside];

[cell addSubview:button];

Я бы очень хотел использовать подход конструктора интерфейсов — есть предложения?

С Уважением


person Bjarke    schedule 07.08.2011    source источник


Ответы (3)


пытаться

[cell.contentView addSubview: кнопка];

также

UIImage *img = [UIImage imageNamed:@"myPackage.png"]; здесь вы не выделяете память, поэтому нет необходимости

[выпуск изображения]; потому что есть вероятность сбоя

person Kumaran    schedule 07.08.2011

Кнопка должна запускать метод IBAction, который вы установили в IB. Вы проверили, вставив NSLog или установив точку останова, если метод введен?

Кнопка настроена на первоначальную активацию в ИБ?

Суть конструкции IB заключается в том, что IBOutlet получает свое значение, когда ячейка загружается из xib. Затем IBOutlet будет кнопкой в ​​ячейке, которую табличное представление загрузило последней.

КОГДА вы добавляете кнопку программно, вам может потребоваться удалить предыдущую добавленную кнопку для удаленияFromSuperview, прежде чем вы снова добавите кнопку в эту ячейку.

person Per Arve    schedule 07.08.2011
comment
Хорошо, может быть, только в последней ячейке кнопка действительно работает при создании с помощью построителя интерфейса. Я следовал подходу с удалением кнопок из супервизора перед повторным добавлением, и это работает. Меня просто раздражает, что подход с IB такой сложный. - person Bjarke; 07.08.2011
comment
На самом деле, как в IB, так и в программно добавленной кнопке вы должны подумать, как определить, в какой ячейке таблицы находится нажатая. Одним из способов может быть словарь с объектами кнопок в качестве ключей и информацией о ячейке в качестве значения. В действии IBAction:(id)sender у словаря запрашивается значение с ключом, равным параметру отправителя метода действия. - person Per Arve; 07.08.2011

В моем случае проблема заключалась в том, что кнопка была частью фонового представления.

Кнопки, назначенные для фонового просмотра, видимо, не могут реагировать на прикосновения.

person Kof    schedule 03.07.2012