Я думаю, что проблема в том, что вы выпускаете контроллер и просто используете подпредставление, которое сохраняется в его суперпредставлении.Шаблон действия нуждается в цели, которая, как я полагаю, является освобожденным контроллером.И зачем вам выпускать свой viewController, если вам нужен только его вид?Сохраните его и сохраните ссылку через свойство к нему.
Мой способ добавления подпредставлений в ячейку табличного представления будет в подклассе UITableViewCell.Предположим, у вас есть подкласс UITableViewCell
, скажем ButtonTableViewCell
.Инициирование ячейки создает и добавляет UIButton в вашу ячейку и красиво помещает ее в contentView.Decalre свойство, которое ссылается на кнопку.Как UIButton *myButton
.Что нужно сделать в cellForRowAtIndexPath, примерно так:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
ButtonTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyButtonCell"];
if (cell == nil) {
cell = [[ButtonTableViewCell alloc] initWithReuseIdentifier:@"MyButtonCell"];
}
[cell.myButton addTarget:self action:@selector(onDoSomething) forControlEvents:UIControlEventTouchUpInside];
// Do more cell configuration...
return cell;
}
Я создал инициализатор initWithReuseIdentifier
, который может быть легко реализован.
Вы гарантируете освобождение памяти с помощью viewDidUnload метод UIViewController и метод dealloc.