わかりました。これは以前に尋ねられたことがあることを知っています。これを機能させるためにさまざまな方法を試しましたが、何らかの理由で機能しません。文字列をラベルのテキストプロパティに保存しようとしています。ラベルはtableVC
、コンテナビュー内で呼び出される子ビューコントローラViewController
にあり、UIDatePickerの値datePicker
が変更されたときに、IBActionのparentViewControllerから設定しています。私が試してみました:
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"
ます。私はただの初心者の間違いを犯していると思っているので、複雑なデリゲートやプロトコルの方法は必要ありません。[formatter stringFromDate:self.datePicker.date]
また、を使用して、datePickerから適切なnil以外のフォーマットされた値を返すことを確認しましたNSLog(@"%@", [formatter stringFromDate:self.datePicker.date]);
。
編集
ここに、ファイル全体とともにもう少し情報があります。このテーブルは、ストーリーボードで定義された静的テーブルです。これが問題の原因だと思いましたが、ラベルが1つしかないtableVC
サブクラスの代わりにを使用してUIViewController
も機能しませんでした。問題は、子ビューコントローラのプロパティをどのように設定するかにあると思います。prepareForSeque
ただし、他のプロジェクトでこのメソッドを使用する場合、この問題は発生しません。宛先コントローラーのプロパティの値は問題なく設定できますが、宛先コントローラーではないビューコントローラーのプロパティの値は設定できません。これら2つの問題は一致していると思います。すべての接続はストーリーボードを介して適切に行われました。
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
また、これが私の2つの画像で、の選択が変更されたときにfromがどのように更新されるかを示していますが、 testLabel
fromはどのように更新されなかったかを示しています。最初の画像は選択の変更前で、2番目の画像は後です。わかりやすくするために、は3番目のセルの右側にあるラベルであり、はのすぐ上にあるラベルです。ViewController
datePicker
timeLabel
tableVC
timeLabel
testLabel
datePicker
http://cl.ly/image/2Q301v0d2m00
http://cl.ly/image/0223183E1t2m
助けてくれてありがとう。