我正在编写一个简单的库存应用。它使用导航控制器,rootViewController
是UITableView
。当您点击tableView
中的某一行时,会转到detailsViewController
,其中显示所选项目的详细信息。此detailsViewController
的底部是UILabel
,它显示创建时间的日期,以及允许您更改日期的按钮。单击此按钮时,它会使用datePicker
拉出另一个视图控制器。
如何在detailsView
中显示日期标签以显示用户选择的新日期?
以下是我的尝试。我对iOS编程比较陌生,所以这可能是一个简单的修复。
@implementation MPDetailViewController
- (IBAction)changeDate:(id)sender {
MPDateViewController *dated = [[MPDateViewController alloc] init];
[self.navigationController pushViewController:dated animated:YES];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
MPItem *item = self.item;
self.nameField.text = item.itemName;
self.serialNumberField.text = item.serialNumber;
self.valueField.text = [NSString stringWithFormat:@"%d", item.valueInDollars];
//turns a date into a simple string
if (!self.dateFormatter) {
self.dateFormatter = [[NSDateFormatter alloc] init];
self.dateFormatter.dateStyle = NSDateFormatterMediumStyle;
self.dateFormatter.timeStyle = NSDateFormatterMediumStyle;
}
self.dateLabel.text = [self.dateFormatter stringFromDate:item.dateCreated];
}
这是日期视图控制器
@implementation MPDateViewController
- (IBAction)dateWasChanged:(id)sender {
self.nDate = [self.changeDate date];
NSLog(@"%@", self.nDate);
}
- (void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.view endEditing:YES];
MPItem *item = self.item;
item.dateCreated = self.nDate;
super.dateLabel.text = [super.dateFormatter stringFromDate:self.nDate];
}
我很感激您愿意提供的任何帮助或评论。
答案 0 :(得分:1)
您必须为它实施协议。作为协议是在这种情况下使用的最佳做法。
您可以在此处找到Protocol的文档。
@protocol MPDateSelectedDelegate
- (void) MDPDateChanged: (NSDate*) date;
@end
@property (nonatomic, assign) id <MPDateSelectedDelegate> delegate;
您可以在更改日期时调用以上委托方法:
[self.delegate MDPDateChanged: newDate];
你必须在父控制器中实现相同的方法,如下所示:
- (void) MDPDateChanged: (NSDate*) date
{
// Do you stuff at here.
// date will hold the new changed date from picker view.
NSLog(@"%@",date.description);
}
答案 1 :(得分:0)
您似乎正在使用IBActions尝试获取在两个不同视图控制器中发生的用户界面事件。不幸的是,这不起作用。在两个视图控制器之间获取信息的最简单方法(至少对我来说)是使用委托。
Here是关于如何使用委托的教程。
你能做的是:
更改:@implementation MPDetailViewController
收件人:@implementation MPDetailViewController <MPDateViewControllerDelegate>
将以下行添加到MPDateViewController.h
@protocol MPDateViewControllerDelegate
- (void) MPDateViewControllerDidChangeDate: (NSString*) date; //I don't know your datatype here, but you can use it as an argument. I'm using NSString as an example
@end
@property (nonatomic, assign) id <MPDateViewControllerDelegate> delegate;
最后,在DateViewController中更改日期后添加此行
[self.delegate MPDateViewControllerDidChangeDate: newDate];
我希望这会有所帮助