如何在自定义tableviewcell中显示按钮的弹出窗口视图?

时间:2013-06-25 14:50:29

标签: ipad uitableview uipopovercontroller delegation custom-cell

我正在开发一款应用,用户可以在其中输入有关这些产品的产品和信息。有关产品的所有信息都会输入到自定义UITableViewCell中。我还想让用户添加产品图片。为此,我需要显示一个包含UIImagePickerController的弹出视图。当我这样做时,Xcode给了我这个错误:

无法从没有窗口的视图中显示弹出窗口。

当用户点击按钮添加(称为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"是一个自定义类。该类的每个实例代表一个产品。每当用户向tableview添加一行时,此类的一个实例将被添加到数组中。)

我一整天都在搜索SO和谷歌,但我还没有找到任何有关如何使用自定义单元格的解决方案,只能找到它在didSelectRowAtIndexPath中的工作方式以及触摸公开按钮的时间。

所以很快我的看法:当点击自定义单元格中的A按钮时,如何正确显示弹出窗口视图?

提前感谢您,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您正在该方法中创建CustomCell的新实例。此实例未在屏幕上的任何位置显示。您需要找到CustomCell的实例,该实例表示要显示弹出窗口的行。如果此行是静态的并且始终相同,则可以执行以下操作:

// 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的不同部分。将按钮添加到自定义单元格中是很好的,但出于可重用性的目的,您不应该从那里处理敲击。这是你的视图控制器应该做的事情。视图控制器如何知道按钮被点击的时间? Delegation