Как показать popover view с кнопки в пользовательской таблице tableviewcell?

Я разрабатываю приложение, в котором пользователь может вводить продукты и информацию об этих продуктах. Вся информация о продуктах вводится в пользовательский UITableViewCell. Я также хочу, чтобы пользователь добавил изображение продуктов. Для этого мне нужно показать всплывающее представление, содержащее UIImagePickerController. когда я это делаю, Xcode дарит мне эту ошибку:

Popovers нельзя представить из представления, которое не имеет окна.

Когда пользователь нажимает кнопку для добавления изображения (называемого addImage), моя пользовательская ячейка запускает это действие внутри моего TableView:

- (void) addImage
{
 CustomCell *customcell = [[CustomCell alloc] init];

 itemImagePicker = [[UIImagePickerController alloc] init];
 itemImagePicker.delegate = self;
 itemImagePicker.sourceType= UIImagePickerControllerSourceTypePhotoLibrary;

 itemImagePopover = [[UIPopoverController alloc] initWithContentViewController:itemImagePicker];
 [itemImagePopover presentPopoverFromRect:customCell.addImage.bounds inView:self.tableView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

}

my cellForRowAtIndexPath выглядит так:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
 static NSString *CustomCellIdentifier = @"CustomCellIdentifier ";
 CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier: CustomCellIdentifier];
 if (cell == nil) {
 NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell"
 owner:self options:nil];
 for (id oneObject in nib) if ([oneObject isKindOfClass:[CustomCell class]])
 cell = (CustomCell *)oneObject;
 cell.selectionStyle = UITableViewCellSelectionStyleNone;
 }
 ********** *row = [indexPath row];
 Model *model = self.products[indexPath.row];

 cell.itemName.text = model.itemName;
 cell.itemDescription.text = model.itemDescription;
 cell.itemPrice.text = model.itemPrice;

 cell.itemPrice.delegate = self;
 cell.itemName.delegate = self;
 cell.itemDescription.delegate = self;

 NSLog(@"%@", cell.itemPrice);

 return cell;
}

("model" - это пользовательский класс, каждый экземпляр которого представляет один продукт. Каждый пользователь добавляет строку в tableview, один экземпляр этого класса добавляется в массив.)

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

так что мой вопрос скоро: как правильно показать всплывающее представление, когда нажата кнопка "Внутри пользовательской ячейки"?

Заранее спасибо, любая помощь будет очень признательна.

1 ответ

Вы создаете новый экземпляр CustomCell в этом методе. Этот экземпляр не отображается нигде на экране. Вам нужно найти экземпляр CustomCell, который представляет строку, из которой вы хотите показать popover. Если эта строка статична и всегда будет одинаковой, вы можете сделать что-то вроде этого:

// change the row and section variables below to the values that correspond to the section and row from which you want to display the popover
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section]; 
CustomCell *customCell = [self.tableView cellForRowAtIndexPath:indexPath];

Если вы заранее не знаете путь к индексу, передайте его как параметр addImage:

РЕДАКТИРОВАТЬ

Из вашего обновленного вопроса кажется, что вы путаете разные части MVC. Хорошо добавить кнопку в свою пользовательскую ячейку, но для целей повторного использования вы не должны обрабатывать нажатие оттуда. Это то, что должен делать ваш контроллер. Как контроллер просмотра знает, когда кнопка нажата? Делегация.

licensed under cc by-sa 3.0 with attribution.