2017-02-28 69 views
1

我有一个视图控制器(vc1),它有一个容器视图,下面有一个保存按钮。容器视图嵌入到具有静态单元格的tableview控制器(tvc1)中。每个单元格都有标签和文本框。 我想在vc1中获取tvc1中textfields的内容。 我尝试了两种方法:无法访问容器视图的tableview控制器元素

Preparefor赛格瑞在VC1:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    NSLog(@"prepare for segue called in settings view controller."); 
    NSString * segueName = segue.identifier; 
    if ([segueName isEqualToString: @"embedseguesettings"]) { 
     NSLog(@"embed segue called "); 
     settingsTableViewController *tvc1 = (settingsTableViewController *)segue.destinationViewController; 
     tvc1.surlTextField.text = @"i got u ";   
    } 
} 

我收到了“称为嵌入SEGUE”打印,但在tvc1文本字段不会更新与我的文字“我得到了U”。我有正确的tvc1对象吗?在VC1

实例化tvc1:

- (IBAction)save:(id)sender { 
    settingsTableViewController *tvc1 = [self.storyboard instantiateViewControllerWithIdentifier:@"settingsTableView"]; 
    NSLog(@"surl textfeild = %@",tvc1.surlTextField.text); 
} 

但我总是得到null作为输出。我键入一些文本来surl textfield一个新闻保存。我总是得到空。

settingsTableViewController是容器视图的表视图控制器,并且我只设置该类的行数和no行数。我是否需要出院细胞,我不应该? ,它是一个静态tableview。

回答

1

问题是,您正在加载视图之前在tvc1中设置textField值。

您应该添加在tvc1属性...

@property (nonatomic, strong) NSString* someText; 

然后在prepareForSegue方法,分配给someText保持对它的引用tvc1

if ([segueName isEqualToString: @"embedseguesettings"]) { 
    settingsTableViewController *tvc1 = (settingsTableViewController *)segue.destinationViewController; 
    tvc1.someText = @"i got u "; 
    self.tvc1 = tvc1  
} 

,并在您tvc1 viewDidLoad

tvc1.surlTextField.text = self.someText 

然后在您保存方法:

- (IBAction)save:(id)sender { 
    // Don't instantiate a new tvc1 
    NSLog(@"surl textfeild = %@",self.tvc1.someText); 
} 
+0

完美。非常感谢。 – CodeTry

+0

但对于第二种方法,当我试图通过故事板实例化tvc1时,此时tvc1已经显示并且已被加载。为什么它不显示文本字段? – CodeTry

+0

当您实例化视图控制器时,它会创建该类的新实例 - 不是您更新的实例 –

1

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender流向它仍然没有分配其网点所以...

UIViewController没有在那一刻加载。 您需要设置@property值并访问viewDidLoad()方法 中的值,并相应地设置您的textFiled文本。