我可以使用PopViewControllerAnimated传递数据吗?

时间:2016-04-18 20:25:29

标签: ios objective-c xcode

我想在调用“popViewControllerAnimated”时将NSString从一个视图控制器传递给另一个视图控制器。

我在ScheduleExerciseViewController

中有这个
    CalendarMainViewController *controller = [[CalendarMainViewController alloc]init];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd"];
    NSString *fromDate = [formatter stringFromDate:self.dateCellsManager.startDate];
    NSLog(@"fromDate: %@", fromDate);
    [controller setPutDateHere:fromDate];


    //Pop the controller view controller
    [self.navigationController popToViewController:controller animated:YES];

CalendarMainViewController.h我有:

@property (strong, nonatomic) NSMutableArray *datesWithEvent;
@property (nonatomic,retain) NSString *putDateHere;

CalendarMainViewController我有:

-(void) viewWillAppear:(BOOL)animated{
    self.tabBarController.title = @"Calendar";
    NSLog(@"putDataHere: %@", _putDateHere);
    NSLog(@"datesWithEvents: %@", _datesWithEvent);
}

它在两者中打印“null”。

有任何建议/意见/反馈吗?

2 个答案:

答案 0 :(得分:1)

不,您无法使用该方法传递数据。您可以使用NSNotification轻松实现(强烈推荐)。或者您可以通过艰难的方式完成它并将您的导航控制器子类化并创建一个自定义方法,该方法可以弹出到特定的视图控制器并采用您想要的任何参数(不推荐)。

此外,您正在实例化一个新的CalendarMainViewController,而不是在堆栈中查找旧的CalendarMainViewController。我建议迭代堆栈

for (UIViewController* vc in self.navigationController.viewControllers){
    if ([vc isKindOfClass:[CalendarMainViewController class]]){
         [self.navigationController popToViewController:vc animated:true];
    }
}

最后,设置类属性如下:

controller.putDateHere = fromDate;

塞特尔和吸气者都是老派:)

答案 1 :(得分:0)

如果您使用的是Storyboard,那么在返回上一个视图控制器时可以传递数据的另一种方法是使用展开segue ,然后使用prepareForSegue:方法传递数据。 / p>