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(视图控制器)视图视为私有视图。

您应该做的是向子视图控制器添加属性以保存您需要显示的字符串和其他状态数据。然后在您的子视图控制器的 viewWillAppear 方法中,您可以获取设置并将它们应用到您的视图层次结构中。

在您的情况下,由于您正在做的是显示有关“currentAttendee”的一大堆信息(我猜这是一个模型对象),您可能需要考虑将指向整个参加者对象的指针传递给孩子,并且让它显示信息本身。

或者,孩子可以编辑对象,您可能希望传递一个副本,并在您想要提交在孩子中所做的更改时使用委托方法,或者如果您想放弃更改,则只需返回。

于 2014-05-23T00:31:49.333 回答