1

これが私のビューの設定です:

設定を表示

UIBarButtonItemをクリックすると、が表示されますUIImagePickerControllerUIPopoverControllerこれは、iPad で必要なため、「リセット」ボタンをクリックして呼び出される を使用して行う必要があります。これが私のコードです:

-(IBAction) btnReset:(id)sender {
    [self chooseImage];
}

-(void) chooseImage {
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
        imagepicker = [[UIImagePickerController alloc] init];
        imagepicker.allowsEditing = NO;
        imagepicker.delegate = self;
        imagepicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        imagepicker.navigationBar.opaque = true;


        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
            popoverController = [[UIPopoverController alloc] initWithContentViewController:imagepicker];

            [popoverController presentPopoverFromBarButtonItem:reset permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];

        } else {
            [self presentModalViewController:imagepicker animated:YES];   
        }
    }
}

ただし、これが呼び出されると、ビューは次のエラーでクラッシュします。

'NSInvalidArgumentException', reason: '-[UIPopoverController presentPopoverFromRect:inView:permittedArrowDirections:animated:]: ウィンドウを持たないビューからポップオーバーを表示することはできません.'

私は何を間違っていますか?前もって感謝します。

4

1 に答える 1

0

ビュー階層にないアイテムにポップオーバーを作成しようとしているようです。このメソッドがボタンによって呼び出されている場合は、メソッドヘッダーを-(void)chooseImage:(id)senderに変更し、ツールバーにあるUIBarButtonからポップオーバーを表示してみてください。

また、ARCを使用している場合(あなたがそうであるように見えます)、UIPopoverを保持する必要があります。そうしないと、まだ必要なときに解放されます。このスタックオーバーフローの投稿を参照してください。あなたはすでにこれをしているかもしれませんが、あなたがpopoverControllerを指定したかどうか/どのように指定したかがわからないので、私はそれを上げると思いました。

于 2012-06-10T00:45:17.523 に答える