0

在我的应用程序中,我有一个表格视图控制器,它创建了几个自定义单元格,我已经为其创建了视图控制器 (.xib) 和类。在其中一个单元格中,有一个按钮触发一种方法(在“内部触摸”),该方法假定向用户呈现图像选择器。我已经使用文档中的苹果标准代码来展示媒体选择器,但它似乎不起作用。我尝试将单元格用作创建媒体选择器的委托和视图控制器,以及作为媒体选择器的委托,但它似乎不起作用。我还尝试过隐含创建单元格的 UITableView 的对象,并将其用作委托和视图控制器,这也不起作用。我已经添加了相关方法的代码。关于如何做到这一点的任何建议?

处理“内部修饰”按钮的方法(在自定义单元格类中使用他的方法):

- (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

显然这是行不通的,因为 a UITableViewCellorUITableView不是UIViewController你需要调用的对象presentModalViewController:animated:。我认为最好的解决方案是让您的视图控制器处理单元格按钮上的所有触摸事件。

因此,您应该将takeNewPicture:(方法应以小写字母开头)操作方法放在视图控制器类中,并将视图控制器指定为按钮的目标。在 action 方法中,您需要使用sender参数来识别用户点击的单元格。最好的方法是tag为每个按钮分配一个等于表格视图中该单元格行索引的按钮。然后,您可以使用[sender tag]标识包含被点击按钮的单元格的索引路径。

于 2012-07-12T15:57:12.040 回答
0

首先我希望你不要在模拟器中运行它,因为你知道它没有摄像头:)

您说这TakeNewPicture是在自定义单元格类中,并且在其中您调用[self startCameraControllerFromViewController:self usingDelegate:self];
Were self 是自定义单元格而不是 UIViewController..

我建议将此代码移动到 viewController,当您创建一个单元格时,只需执行

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