如何从被解雇的导航控制器中的文本视图中捕获最终值

时间:2016-04-26 21:42:46

标签: ios objective-c

我有一个导航控制器,里面有2个视图控制器.. viewController(A)和viewController(B)。

在ViewController(A)中,我有代码定义ViewController(B)的左右导航项,然后将其推送到导航堆栈。 这个代码在演示者viewController(A)中显示在这里......

-(void)presentImageEditor
    {
        IGCellPath *pathForCurrentCell = [self pathForCurrentCell];
        iRpImageAndMedia *imageAndMediaItem = [thePropertyImageSet objectAtIndex:pathForCurrentCell.columnIndex];

        iRpImageEditorViewController *viewControllerB = [[iRpImageEditorViewController alloc] initWithImageAndMediaItem:imageAndMediaItem];

        viewControllerB.navigationItem.title = @"Photo Details Editor";
        viewControllerB.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(imageEditorDone)];
        viewControllerB.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(imageEditorCancelled)];
        viewControllerB.edgesForExtendedLayout = UIRectEdgeNone;

        [imageEditorNavController pushViewController:viewControllerB animated:YES];
    }


-(void)imageEditorDone
    {
        [imageEditorNavController popViewControllerAnimated:YES];
        [[iRpDatabase sharedInstance] saveChangesToDatabase];
    }


-(void)imageEditorCancelled
    {
        [imageEditorNavController popViewControllerAnimated:YES];
        [[iRpDatabase sharedInstance] rollbackChangesToDatabase];
    }

我提供的视图控制器中的代码... viewController(B)有这个......

-(void)textViewDidEndEditing:(UITextView *)textView
{
    if (textView == descriptionView)
    {
        [theImageAndMediaItem.mediaManagedObj setValue:textView.text forKey:@"desc"];
    }
}

问题是,在呈现的视图控制器中,viewController(B),当它们解除viewController(B)时,viewController(A) -(void)imageEditorDone在此呈现的视图控制器内的viewController(B) -(void)textViewDidEndEditing:(UITextView *)textView方法之前触发...的viewController(B)。所以我无法捕获它们的最后一个条目并在它们关闭视图控制器之前保存它,因为事件以错误的顺序发生。 我原本期望你实际使用的视图控制器会在呈现视图控制器触发事件​​-(void)textViewDidEndEditing:(UITextView *)textView之前触发它的事件-(void)imageEditorDone

我怎样才能确保在演示者代码触发之前捕获他们在呈现视图中做的最后一件事?

2 个答案:

答案 0 :(得分:1)

如何交换这些方法?

   [imageEditorNavController popViewControllerAnimated:YES];
   [[iRpDatabase sharedInstance] saveChangesToDatabase];

答案 1 :(得分:0)

根据对Alex的帖子发表评论的建议,这就是我为使其发挥作用所做的。我试图将他的原始答案(这是错误的)编辑到他的评论建议(这是正确的),试图给他答案的功劳,但他拒绝了我的编辑,lolololool。

我没有在viewController(A)中添加bar按钮项和viewController(A)中的关联处理程序,而是在viewController(B)中添加了我的bar按钮项(和关联的处理程序),以便我可以保存数据viewController(B)在它被解雇之前。

所以在viewController(B)中,也许在init方法中,我做了这个......

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(imageEditorDone)];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(imageEditorCancelled)];

然后在你的处理程序中,你可以做这样的事情......

-(void)imageEditorDone
{
    [self.view endEditing:YES];

    // Save your data here...

    [self.navigationController popViewControllerAnimated:YES];
}


-(void)imageEditorCancelled
{
    [self.view endEditing:YES];
    [self.navigationController popViewControllerAnimated:YES];
}