从自定义UITableViewCell操作UIImagePickerController的最佳方法

时间:2013-12-31 00:18:05

标签: ios objective-c uitableview ios7

我有一个自定义的UITableViewCell声明:

@interface ValveCell : UITableViewCell <UINavigationControllerDelegate,UIImagePickerControllerDelegate>

挂钩到以下方法的按钮:

- (void) addPicture {
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    // I have tried every possible value for the presentation style
    picker.modalPresentationStyle = UIModalPresentationNone;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    // controller is a @property I added to my custom class
    // it is the UIViewController that is the data source/delegate for the table view
    [self.controller presentViewController: picker animated: YES completion: nil];
}

支持委托方法:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [picker dismissViewControllerAnimated:YES completion: nil];
    UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
    if (chosenImage) {
        [self.valve pushPhoto: chosenImage];}
}

我对此代码有两个问题(至少):

  1. 每次单击按钮时,我的记录都会收到以下警告:“快照未渲染的视图会导致空白快照。确保您的视图至少渲染一次屏幕更新后的快照或快照。“我尝试了各种演示样式。我不知道为什么会这样,或者我需要做些什么才能让它消失。

  2. 我不得不把控制器交给单元格(在我的tableView:cellForRowAtIndexPath:方法中)。我知道走superView链是不受欢迎的。有没有更好的方法让控制器打开它?或者打开不需要控制器的选择器的另一种方法?即使是self.tableView.delegate之类的东西,如果是单元格,但有一个指向其tableview的后向指针,也会有效。

  3. 更新

    #1回答@Jiten Parmar。对于#2,我找到了允许我使用代码的PPTopMostController pod:

    [UIViewController topMostController]
    

    就像魅力一样。

1 个答案:

答案 0 :(得分:3)

"Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates."

答案是,当您的应用处于纵向模式并且您使用横向打开图像选择器时,它将在控制台中显示此警告,但无需担心,它对您的应用并不重要且没有崩溃问题会在那里。