调用popover并将变量发送回先前的uiview

我有一个用故事板创建的UITableViewController。 比起我有一个叫做故事板创建的popOver的锚点。 弹出窗口是另一个UItableViewController,当我点击一行时,我应该回调第一个控制器并传递一个对象。 我已经在popover对象中尝试了这一点:

  • (void)prepareForSegue :( UIStoryboardSegue *)segue sender:(id)sender {

    if([[segue identifier] isEqualToString:@“Fortune”]){

    NSIndexPath *indexPath = (NSIndexPath *)sender;
    
    ASFortuneTeller * aController = [segue destinationViewController];
    [aController setWYPT:[allWYPTs objectAtIndex:indexPath.row]];
    

    }}

  • 基本上我需要将一个NSMutableDictionary包传递给第一个UITableViewController。 但我已经注意到以这种方式创建了一个新的ASFortuneTeller对象,这不是我想要的......我只想回拨第一个控制器并传递一个对象。

    我该怎么做?


    快速解决方案(当涉及总是相同的两个类时)可以是:

    在第一个视图控制器的.h文件中,定义一个方法(或者只是一个属性):

    -(void)selectedWYPT:(NSMutableDictionary*)wypt;
    

    在第二个视图控制器的.h文件中创建一个属性

    @property FirstUIViewController *firstView;
    

    在第一个视图控制器中,你将通过一个segue打开第二个视图控制器,所以你可以使用:

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
        if ([segue.identifier isEqualToString:@"segueIdentifier"]) {
            SecondUIViewController *destination = segue.destinationViewController;
            destination.firstView = self;
        }
    }
    

    在第二个视图中选择行时,您可以使用

    if (self.firstView)    
        [self.firstView setWYPT:[allWYPTs objectAtIndex:indexPath.row]];
    

    将数据传回第一个视图。


    如上所述,当涉及两个类时,这将是一个快速解决方案。

    另一种方法是使用协议。 当第一个视图控制器不会总是FirstUIVierController时,你可以使用这样的东西:

    SecondUIViewController.h

    @class SecondUIViewController;
    @protocol SecondUIViewControllerDelegate <NSObject>
    
    -(void)secondUIViewController:(SecondUIViewController*)controller didSelectWYPT:(NSMutableDictionary*)wypt;
    
    @end
    
    @interface SecondUIViewController : UIViewController
    
    @property id<SecondUIViewControllerDelegate> delegate;
    
    @end
    

    SecondUIViewController.m

    选择行的位置:

    if (self.delegate && [self.delegate respondsToSelector:@selector(secondUIViewController:didSelectWYPT:)])
        [self.delegate secondUIViewController:self didSelectWYPT:[allWYPTs objectAtIndex:indexPath.row]];
    

    AnyOtherUIViewController.h

    #import "SecondUIViewController.h"
    
    @interface AnyOtherUIViewController : UIViewController <SecondUIViewControllerDelegate>
    
    ...
    ...
    

    AnyOtherViewController.m

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
        if ([segue.identifier isEqualToString:@"segueIdentifier"]) {
            SecondUIViewController *destination = segue.destinationViewController;
            destination.delegate = self;
        }
    }
    
    -(void)secondUIViewController:(SecondUIViewController*)controller didSelectWYPT:(NSMutableDictionary*)wypt {
        //do something with the data
    }
    
    链接地址: http://www.djcxy.com/p/61281.html

    上一篇: call popover and send back variable to previous uiview

    下一篇: how can i reset a view controller in xcode to its state when i started the app