0

私のアプリには、ビューコントローラー(.xib)とクラスを作成したいくつかのカスタマイズセルを作成するテーブルビューコントローラーがあります。それらのセルの1つに、ユーザーに画像ピッカーを提示することを想定したメソッドをトリガーするボタンがあります(「内側のタッチアップ」で)。メディアピッカーを表示するためにドキュメントのアップル標準コードを使用しましたが、機能していないようです。セルをメディアピッカーの作成元のデリゲートとビューコントローラーの両方として、およびメディアピッカーのデリゲートとして使用しようとしましたが、機能していないようです。また、セルが作成されたUITableViewのオブジェクトを誘導し、それをデリゲートおよびビューコントローラーとして使用してみましたが、これも機能しません。関連するメソッドのコードを追加しました。それを行う方法について何かアドバイスはありますか?

ボタンを処理するメソッド'内部のタッチアップ"(カスタムセルクラスのメソッドhis):

- (IBAction)TakeNewPicture:(id)sender {
    [self startCameraControllerFromViewController:self usingDelegate:self];
}

startCameraController ...メソッド(セルのクラスにもあります):

- (BOOL) startCameraControllerFromViewController: (UIViewController*) controller
                                   usingDelegate: (id <UIImagePickerControllerDelegate,
                                                   UINavigationControllerDelegate>) delegate {

    if (([UIImagePickerController isSourceTypeAvailable:
          UIImagePickerControllerSourceTypeCamera] == NO)
        || (delegate == nil)
        || (controller == nil))
        return NO;


    UIImagePickerController *cameraUI = [[UIImagePickerController alloc] init];
    cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera;

    // Displays a control that allows the user to choose picture or
    // movie capture, if both are available:
    cameraUI.mediaTypes =
    [UIImagePickerController availableMediaTypesForSourceType:
     UIImagePickerControllerSourceTypeCamera];

    // Hides the controls for moving & scaling pictures, or for
    // trimming movies. To instead show the controls, use YES.
    cameraUI.allowsEditing = YES;

    cameraUI.delegate = delegate;

   [controller presentModalViewController: cameraUI animated: YES];
    //[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentModalViewController:cameraUI animated:YES];
    return YES;
}

御時間ありがとうございます!どんなサポートも大歓迎です:](Objective-cスタイルのスマイリー)

4

2 に答える 2

0

明らかに、またははオブジェクトではないためUITableViewCell、これは機能しません。これを呼び出す必要があります。最善の解決策は、ViewControllerにセルのボタンのすべてのタッチイベントを処理させることだと思います。UITableViewUIViewControllerpresentModalViewController:animated:

したがって、takeNewPicture:(メソッドは小文字で始まる必要があります)アクションメソッドをView Controllerクラス内に配置し、ViewControllerをボタンのターゲットとして割り当てる必要があります。次に、actionメソッド内で、sender引数を使用して、ユーザーがタップしたセルを識別する必要があります。これを行う最良の方法はtag、テーブルビュー内のそのセルの行インデックスに等しい各ボタンにを割り当てることです。次に、を使用[sender tag]して、タップされたボタンを含むセルのインデックスパスを識別できます。

于 2012-07-12T15:57:12.040 に答える
0

まず、シミュレーターでこれを実行しないことを願っています。なぜなら、あなたが知っているように、カメラがないからです:)

あなたはそれTakeNewPictureがカスタムセルクラスにあると言います、そしてその中であなたは[self startCameraControllerFromViewController:self usingDelegate:self];
自分自身がUIViewControllerではなくカスタムセルであると呼びます。

このコードをviewControllerに移動することをお勧めします。セルを作成するときは、

[[cell button] addTarget:self action:@selector(TakeNewPicture:) forControlEvents:UIControlEventTouchUpInside];
于 2012-07-12T15:58:53.967 に答える