0

ユーザーが製品とその製品に関する情報を入力できるアプリを開発しています。製品に関するすべての情報は、カスタム 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;
}

(「モデル」はカスタム クラスです。そのクラスの各インスタンスは 1 つの製品を表します。ユーザーがテーブルビューに行を追加するたびに、このクラスの 1 つのインスタンスが配列に追加されます。)

私は一日中SOとグーグルを検索してきましたが、これがカスタムセルでどのように機能するかについての解決策は見つかりませんでした.didSelectRowAtIndexPathでの機能と開示ボタンがタッチされたときのみ.

だから私のプットは簡単です:カスタムセル内のボタンがタップされたときにポップオーバービューを適切に表示するにはどうすればよいですか?

事前に感謝します。どんな助けでも大歓迎です。

4

1 に答える 1

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 のさまざまな部分を混乱させているようです。ボタンをカスタム セルに追加しても問題ありませんが、再利用のために、そこからのタップを処理しないでください。これは、View Controller が行うべきことです。ボタンがタップされたことをView Controllerはどのように認識しますか? 委任

于 2013-06-25T15:00:30.180 に答える