我正在开发一款应用,用户可以在其中输入有关这些产品的产品和信息。有关产品的所有信息都会输入到自定义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按钮时,如何正确显示弹出窗口视图?
提前感谢您,非常感谢任何帮助。
答案 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