Ios 如何将日期传递回父类并更改标签?
我正在编写一个简单的清单应用程序。它使用一个导航控制器,Ios 如何将日期传递回父类并更改标签?,ios,iphone,objective-c,uiviewcontroller,uidatepicker,Ios,Iphone,Objective C,Uiviewcontroller,Uidatepicker,我正在编写一个简单的清单应用程序。它使用一个导航控制器,rootViewController是一个UITableView。当您单击表视图中的一行时,它会将您带到详细信息查看控制器,其中显示所选项目的详细信息。在这个detailsViewController的底部是一个ui标签,显示创建时间的日期,以及一个允许您更改日期的按钮。单击此按钮时,它会调出另一个带有日期选择器的视图控制器 如何在detailsView中获取日期标签以显示用户选择的新日期 下面是我的尝试。我对iOS编程比较陌生,所以这可能
rootViewController
是一个UITableView
。当您单击表视图中的一行时,它会将您带到详细信息查看控制器
,其中显示所选项目的详细信息。在这个detailsViewController
的底部是一个ui标签
,显示创建时间的日期,以及一个允许您更改日期的按钮。单击此按钮时,它会调出另一个带有日期选择器的视图控制器
如何在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];
}
如果您愿意提供任何帮助或意见,我将不胜感激。您似乎正在使用iActions尝试获取发生在两个不同视图控制器中的用户界面事件。不幸的是,这不起作用。在两个视图控制器之间获取信息的最简单方法(至少对我来说)是使用代理
是关于如何使用代理的教程
你能做的是:
更改:@implementation-MPDetailViewController
致:@implementation-MPDetailViewController
将以下行添加到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;
我希望这有助于您必须为它实现协议。As协议是在这种情况下使用的最佳实践
在这里您可以找到您的文档
您必须在父控制器中实现相同的方法,如下所示:
- (void) MDPDateChanged: (NSDate*) date
{
// Do you stuff at here.
// date will hold the new changed date from picker view.
NSLog(@"%@",date.description);
}
你必须按照协议或注册事件进行反向处理,好吧,我已经完成了你们两人所说的一切,但是当你说“//在这里做你的事情”时,你到底建议我做什么?我想我只是不知道我需要写哪行代码,一旦我完成了所有这些委托/协议的工作,就会改变日期标签。你得到了你在日期选择器上选择的日期。好吧,我已经完成了你们两人所说的一切,但是当你在这里说“//做你的工作”时,你到底建议我做什么?我想我只是不知道我需要写哪行代码,一旦我完成了所有委托/协议的工作,它实际上会改变日期标签。所以假设你有一个NSDate对象,你可以得到date(date.description,正如Nirmit指出的)的字符串值,然后使用dateLabel.text=dateString。就这样。如果您需要特定的格式,我建议您查看NSDateFormatter()
@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);
}