好吧,我知道这已被问及之前,我已经尝试了许多不同的方法来使这项工作,但由于某种原因它不会。我试图将字符串保存到标签的文本属性。该标签位于容器视图中名为tableVC
的子视图控制器中,并且当UIDatePicker的值更改时,我将它从IBAction中的parentViewController,ViewController
中进行设置。我曾尝试:设置子视图控制器属性
tableVC *tVC = [[tableVC alloc] init];
tVC.timeLabel.text = [formatter stringFromDate:self.datePicker.date];
,也有试图使财产@property (strong, nonatomic) tableVC *tVC;
然后做:
_tVC = [tableVC alloc] init];
_tVC.timeLabel.text = [formatter stringFromDate:self.datePicker.date];
但这并不工作。顺便说一句,我有#import "tableVC"
。我不想要一个复杂的委托或协议方式来做这件事,因为我认为我只是在做一个noob错误。此外,我已确认[formatter stringFromDate:self.datePicker.date]
确实使用NSLog(@"%@", [formatter stringFromDate:self.datePicker.date]);
从datePicker返回适当的非零格式值。
编辑
这里是整个文件一起多一点的信息。该表是一个在Storyboard中定义的静态表。我认为这可能是问题的原因,但即使我只用一个标签取代tableVC
的子类UIViewController
,它也不起作用。我认为问题在于我如何设置子视图控制器属性。但是,在其他项目中使用prepareForSeque
方法时,我没有此问题。我可以为目标控制器的属性设置值,但不是目标控制器的视图控制器属性的值。我认为这两个问题是一致的。所有的连接都是通过Storyboard进行的。
ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end
ViewController.m
#import "ViewController.h"
#import "tableVC.h"
@interface ViewController()
@property (weak, nonatomic) IBOutlet UIView *containerView;
@property (weak, nonatomic) IBOutlet UILabel *testLabel;
@property (weak, nonatomic) IBOutlet UIDatePicker *datePicker;
- (IBAction)changedDatePickerSelection:(id)sender;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
tableVC *tVC = [[tableVC alloc] init];
[self addChildViewController:tVC];
[tVC didMoveToParentViewController:self];
NSLog(@"parent");
}
- (IBAction)changedDatePickerSelection:(id)sender
{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.timeZone = [NSTimeZone defaultTimeZone];
formatter.timeStyle = NSDateFormatterShortStyle;
formatter.dateStyle = NSDateFormatterMediumStyle;
tableVC *tVC = (tableVC *)self.childViewControllers.lastObject;
tVC.timeLabel.text = [formatter stringFromDate:self.datePicker.date];
_testLabel.text = [formatter stringFromDate:self.datePicker.date];
NSLog(@"%@", [formatter stringFromDate:_datePicker.date]);
NSLog(@"%@", tVC.timeLabel.text);
}
@end
tableVC.h
#import <UIKit/UIKit.h>
@interface tableVC : UITableViewController
@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
@end
tableVC.m
#import "tableVC.h"
#import "ViewController.h"
@interface tableVC()
@property (weak, nonatomic) IBOutlet UITextField *titleTextField;
@property (weak, nonatomic) IBOutlet UISwitch *onOffSwitch;
@property (weak, nonatomic) IBOutlet UIButton *saveButton;
- (IBAction)saveAlarm;
@end
@implementation tableVC
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.timeZone = [NSTimeZone defaultTimeZone];
formatter.timeStyle = NSDateFormatterShortStyle;
_timeLabel.text = [formatter stringFromDate:[NSDate date]];
NSLog(@"%@", _timeLabel.text);
}
- (BOOL)textFieldShouldReturn:(UITextField*)aTextField
{
[aTextField resignFirstResponder];
return YES;
}
- (IBAction)saveAlarm
{
// do something
}
@end
此外,这里是我的两张图片,显示datePicker
的选择更改时ViewController
的testLabel
如何更新,但tableVC
的timeLabel
不是如何更新的。第一张图像是在选择更改之前,第二张是之后。为了澄清,timeLabel
是第三个单元右侧的标签,而testLabel
是直接位于datePicker
之上的标签。
http://cl.ly/image/2Q301v0d2m00
http://cl.ly/image/0223183E1t2m
感谢您的帮助。
你的'timeLabel'属性是什么样的? – mkral
@mkral'@property(弱,非原子)IBOutlet UILabel * timeLabel; ' –
您是以编程方式或使用InterfaceBuilder添加'tableVC'吗?如果您使用的是界面构建器,您是否连接了所有的网点? – mkral