Ios 从自定义表格单元格实例化图像选择器

Ios 从自定义表格单元格实例化图像选择器,ios,uitableview,uiimagepickercontroller,modalviewcontroller,Ios,Uitableview,Uiimagepickercontroller,Modalviewcontroller,在我的应用程序中,我有一个表视图控制器,它创建了两个自定义单元格,我为这些单元格创建了视图控制器(.xib)和类。在其中一个单元中,有一个按钮触发一个方法(在“内部触碰”中),该方法假定为用户提供一个图像选择器。我使用了文档中的苹果标准代码来演示媒体选择器,但它似乎不起作用。我曾尝试将该单元格用作创建媒体选取器的委托和视图控制器,以及媒体选取器的委托,但似乎不起作用。我还尝试嵌入创建单元格的UITableView的对象,并将其用作委托和视图控制器,但这也不起作用。我已经添加了相关方法的代码。有什

在我的应用程序中,我有一个表视图控制器,它创建了两个自定义单元格,我为这些单元格创建了视图控制器(.xib)和类。在其中一个单元中,有一个按钮触发一个方法(在“内部触碰”中),该方法假定为用户提供一个图像选择器。我使用了文档中的苹果标准代码来演示媒体选择器,但它似乎不起作用。我曾尝试将该单元格用作创建媒体选取器的委托和视图控制器,以及媒体选取器的委托,但似乎不起作用。我还尝试嵌入创建单元格的UITableView的对象,并将其用作委托和视图控制器,但这也不起作用。我已经添加了相关方法的代码。有什么建议吗

处理按钮内部润色的方法”(自定义单元格类中的方法):

startCameraController…方法(也在单元格类中):

-(BOOL)startCameraControllerFromViewController:(UIViewController*)控制器
usingDelegate:(id)delegate{
如果(([UIImagePickerController]资源类型可用:
UIImagePickerControllerSourceTypeCamera]==否)
||(委托==零)
||(控制器==零)
返回否;
UIImagePickerController*cameraUI=[[UIImagePickerController alloc]init];
cameraUI.sourceType=UIImagePickerControllerSourceTypeCamera;
//显示允许用户选择图片或图片的控件
//电影捕获,如果两者都可用:
cameraUI.mediaTypes=
[UIImagePickerController可用于源类型的中间类型:
UIImagePickerControllerSourceTypeCamera];
//隐藏用于移动和缩放图片的控件,或用于
//剪辑电影。若要显示控件,请使用“是”。
cameraUI.allowsEditing=是;
cameraUI.delegate=代表;
[控制器显示ModalViewController:cameraUI动画:是];
//[[[UIApplication sharedApplication]keyWindow]rootViewController]presentModalViewController:cameraUI动画:是];
返回YES;
}

感谢您的时间!我们非常感谢您的支持:。(Objective-c风格的笑脸)显然,这无法工作,因为
UITableViewCell
UITableView
不是
UIViewController
对象,您需要调用
presentModalViewController:animated:
。我认为最好的解决方案是让视图控制器处理单元格按钮上的所有触摸事件


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

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

您说,
TakeNewPicture
在自定义单元格类中,并在其中调用
[self-startCameraControllerFromViewController:self-usingDelegate:self];

WARE self是自定义单元格而不是UIViewController

我建议把这段代码移到viewController中,当你创建一个单元格时,就这样做

[[cell button] addTarget:self action:@selector(TakeNewPicture:) forControlEvents:UIControlEventTouchUpInside];

您知道执行是否真的进入了
presentModalViewController
行吗?或者它是否真的进入了
startCameraControllerFromViewController
?您可能需要放置一些NSLog语句,这样您就可以知道了。您还可以使用NSLog来确保cameraUI对象在初始化后不为null我已经在TableView类中创建了方法“StartCameranControllerFromView…”,在该类中单元格被实例化,并从单元格中调用它(实例化了一个新的TableView并调用了该方法,表视图同时是视图控制器和委托(代码如下所示:EditProfileTableViewController*TableView=[[EditProfileTableViewController alloc]init];[TableView StartCameranControllerFromViewController:TableView usingDelegate:TableView];)现在它启动函数startCameraFromViewController…,(我已经用NSLog检查过),{下一次回复时继续}但它实际上不起作用。我正在使用模拟器,所以这可能是问题吗?如果是,你认为它最终会起作用吗?(理论上,当然)…你在模拟器中没有摄像头,所以这当然是一个问题,在你的startCameraControllerFromViewController方法中,你检查设备是否支持带摄像头的摄像头[UIImagePickerController isSourceTypeAvailable:UIImagePickerController资源类型Camera]==不,这会导致方法调用return;谢谢你的支持。我想我只需要花99美元注册为苹果开发者并在我的iPhone上进行测试……我必须知道这一天终将到来。哈哈,你无法避免。模拟器是一个很好的工具,但没有人可以在real de上测试它而开发出一款像样的应用程序副…很高兴我能帮忙,请回答:)
- (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;
}
[[cell button] addTarget:self action:@selector(TakeNewPicture:) forControlEvents:UIControlEventTouchUpInside];