调用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