Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何将日期传递回父类并更改标签?_Ios_Iphone_Objective C_Uiviewcontroller_Uidatepicker - Fatal编程技术网

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);
}