0

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

Попутчики не могут быть представлены с видом, у которого нет окна.

Когда пользователь нажимает на кнопку, чтобы добавить (так называемый 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]; 

} 

мой 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; 
    } 
    NSUInteger *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 "- это пользовательский класс. Каждый экземпляр этого класса представляет собой один продукт. Каждый пользователь добавляет строку в таблицу, один экземпляр этого класса добавляется в массив.)

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

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

Заранее благодарю вас за любую помощь.

ответ

0

В этом методе создается новый экземпляр 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:.

EDIT

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

+0

<#row>? <#section>? что эти два точно? Я никогда их не видел (я новичок). Я боюсь, что это не сработает, это дает мне ошибку «ожидаемого выражения» для этой строки кода/ – Joris416

+0

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

+0

ах, который уточняет. можете ли вы объяснить мне, как передать индексный путь в качестве параметра для этого метода? – Joris416

 Смежные вопросы

  • Нет связанных вопросов^_^