0

http://imgur.com/2lAJmVd

在上面提供的图片中,显示了三个视图控制器。

让我们按照显示的顺序调用视图控制器ABC



View Controller A通过单击表格单元格来传递解析的 JSON 数据。这填满了“总销售额、折扣等”。使用prepareForSegue方法在视图控制器 B内的字符串/标签 。

此数据基于开始时间/结束时间,执行 segue 时的默认参数提供当天上午 8 点到晚上 10 点的信息。

解析字符串看起来像这样

NSDate *currentDate = [NSDate date];
            NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];
            [dateformatter setDateFormat:@"YYYY-MM-dd"];
            NSString *theDate = [dateformatter stringFromDate: currentDate];

NSString *salesStr = @"http://";
salesStr = [salesStr stringByAppendingString:host];
salesStr = [salesStr stringByAppendingString:@":8080/sales.php?password="];
salesStr = [salesStr stringByAppendingString:pass];
salesStr = [salesStr stringByAppendingString:@"&db="];
salesStr = [salesStr stringByAppendingString:db];
salesStr = [salesStr stringByAppendingString:@"&sdate="];
salesStr = [salesStr stringByAppendingString:theDate];
salesStr = [salesStr stringByAppendingString:@"%2008:00:00&edate="];
salesStr = [salesStr stringByAppendingString:theDate];
salesStr = [salesStr stringByAppendingString:@"%2022:00:00"];

View Controller B内部,您会注意到一个标有“开始时间”的按钮。此按钮启动到View Controller C的push segue。在这个新的视图控制器中,您可以选择日期和时间,它会显示在日期选择器上方的 UILabel 中。日期选择器下方的按钮是 IBAction 并使用

[self.navigationController popViewControllerAnimated:YES];



我的问题是:如何在View Controller C中选择日期/时间,按下按钮,并将位于 UILabel 中的信息发送到View Controller B以便它可以用于更新解析的信息?

我能想到的一种方法是让按钮 segue 到View Controller B,并根据日期/时间选择重新解析信息,但这只会导致过多的“导航控制器堆叠”并且不会对我来说似乎很有效。

任何建议表示赞赏。

4

2 回答 2

2

黑客的方法会奏效。

Apple 的文档提出了一种略有不同的技术。使用视图控制器 C 可以用来与视图控制器 B 通信的方法定义一个简单的协议。

然后给视图控制器 C 一个符合该协议的委托属性。

在您的 prepareForSegue 方法中,将您自己设置为视图控制器 C 的委托。

然后,在视图控制器 C 中,当用户更改日期并单击按钮时,调用委托方法通知视图控制器 B 用户在弹出之前更改了日期值。

我建议也添加一个取消按钮,以便用户可以放弃他们的更改。在这种情况下,您只需在弹出之前跳过调用委托方法。

于 2014-06-04T00:24:45.940 回答
1

在视图控制器 C 的界面中添加一个属性

@property (nonatomic, strong) NSDate *selectedDate;

在从 B 推 C 之前

[cViewController addObserver:self forKeyPath:@"selectedDate" options:0 context:NULL];

并实施

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    //do some stuff
}

在视图控制器 B.

选择新日期时(在视图控制器 V 中)

self.date = myPicker.date;

因此在设置新日期时会通知视图控制器 B

不要忘记在 B 的实现中删除观察者(例如 viewWillAppear)...

[cViewController removeObserver: self....];
于 2014-06-03T23:19:23.603 回答