在我的应用程序中,我有一个表视图控制器,它创建了几个自定义单元格,我已经创建了视图控制器(.xib)和类。在其中一个单元格中,有一个触发方法的按钮(在'内部触摸'),假设向用户显示图像选择器。我已经使用文档中的Apple标准代码来呈现媒体选择器,但它似乎不起作用。我已经尝试将单元格用作创建媒体选择器的委托和视图控制器,以及作为媒体选择器的委托,但它似乎不起作用。我还试过Insiniciating 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 style smiley)
答案 0 :(得分:0)
显然这不起作用,因为UITableViewCell
或UITableView
不是UIViewController
对象,您需要调用presentModalViewController:animated:
。我认为最好的解决方案是让您的视图控制器处理单元格按钮上的所有触摸事件。
因此,您应该在视图控制器类中放置takeNewPicture:
(方法应以小写字母开头)操作方法,并将视图控制器指定为按钮的目标。在action方法中,您需要使用sender
参数来标识用户点击的单元格。执行此操作的最佳方法是为每个按钮分配一个tag
,该按钮等于表视图中该单元格的行索引。然后,您可以使用[sender tag]
来标识包含已点按按钮的单元格的索引路径。
答案 1 :(得分:0)
首先,我希望你不要在模拟器中运行它,因为你知道它没有相机:)
你说TakeNewPicture
在自定义单元格类中,在其中你调用[self startCameraControllerFromViewController:self usingDelegate:self];
self是自定义单元格而不是UIViewController ..
我建议将此代码移至viewController,当您创建单元格时,只需执行
[[cell button] addTarget:self action:@selector(TakeNewPicture:) forControlEvents:UIControlEventTouchUpInside];