1

chlidViewController のメソッドの使い方がたくさん見つかりました。しかし、childViewController から uitextfield と uiswitch の値を変更および設定する方法が見つかりませんでした。

ChildViewController.h:

@protocol VVInformationTableViewControllerDelegate;

@interface VVInformationTableViewController : UITableViewController

@property (weak, nonatomic) id<VVInformationTableViewControllerDelegate> delegate;

@property (weak, nonatomic) IBOutlet UITextField *nameTextField;

@property (weak, nonatomic) IBOutlet UITextField *surnameTextField;

@property (weak, nonatomic) IBOutlet UITextField *emailTextField;

@property (weak, nonatomic) IBOutlet UITextField *locationTextField;

@property (weak, nonatomic) IBOutlet UITextField *headlineTextField;

@property (weak, nonatomic) IBOutlet UITextField *positionTextField;

@property (weak, nonatomic) IBOutlet UITextField *companyTextField;

@property (weak, nonatomic) IBOutlet UISwitch *messagesEnable;

@end

ParentViewControler.m:

   - (void)viewDidLoad
{
    self.currentAttendee = [VVAPIClient sharedClient].currentUser;

    NSParameterAssert(self.currentAttendee);

    [super viewDidLoad];
    [self.navigationController setNavigationBarHidden:YES];

    self.infoTableController = [[VVInformationTableViewController alloc] initWithNibName:@"InformationTableViewController" bundle:nil];
    [self addChildViewController:self.infoTableController];

}

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    self.infoTableController.nameTextField.text = self.currentAttendee.firstName?:@"";
    self.infoTableController.surnameTextField.text = self.currentAttendee.lastName?:@"";
    self.infoTableController.emailTextField.text = self.currentAttendee.email?:@"";
    self.infoTableController.locationTextField.text = self.currentAttendee.location?:@"";

    self.infoTableController.headlineTextField.text = self.currentAttendee.headline?:@"";
    self.infoTableController.positionTextField.text = self.currentAttendee.position?:@"";
    self.infoTableController.companyTextField.text = self.currentAttendee.company?:@"";

}

-(void)viewDidLayoutSubviews{

    self.infoTableController.messagesEnable.on = NO;
    self.infoTableController.nameTextField.tag = 0;
    self.infoTableController.surnameTextField.tag = 1;
    self.infoTableController.emailTextField.tag = 2;
    self.infoTableController.locationTextField.tag = 3;

    self.infoTableController.headlineTextField.tag = 5;
    self.infoTableController.positionTextField.tag = 6;
    self.infoTableController.companyTextField.tag = 7;
}

手伝ってくれてありがとう。

4

1 に答える 1

1

デビッドがコメントで言っているように、しないでください。

これは、他のビュー コントローラーのカプセル化に違反し、スパゲッティ コードにつながります。

別の VC (View Controller) のビューをプライベートとして扱う必要があります。

表示する必要がある文字列やその他の状態データを保持するために、子ビュー コントローラーにプロパティを追加する必要があります。次に、子View ControllerのviewWillAppearメソッドで、設定を取得してビュー階層に適用できます。

あなたの場合、あなたがしているのは「currentAttendee」に関する大量の情報を表示しているため(これはモデルオブジェクトだと思います)、出席者オブジェクト全体へのポインターを子に渡すことを検討することをお勧めします。情報自体を表示させます。

または、子がオブジェクトを編集できる場合、コピーを渡し、子で行われた変更をコミットする場合はデリゲート メソッドを使用するか、変更を破棄する場合は単に戻ることができます。

于 2014-05-23T00:31:49.333 に答える