【问题标题】:Not able to access container view's tableview controller elements无法访问容器视图的 tableview 控制器元素
【发布时间】:2017-02-28 12:51:06
【问题描述】:

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

为 vc1 中的 segue 做准备:

- (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 ";        
    }
}

我正在打印“embed segue called”,但 tvc1 中的文本字段没有更新为我的文本“i got u”。我有正确的 tvc1 对象吗?

在vc1中实例化tvc1:

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

但我总是得到 null 作为输出。我输入一些文本到 surl 文本字段,然后按保存。我总是得到空值。

settingsTableViewController 是容器视图的表视图控制器,我只设置了该类中的节数和行数。我是否需要使单元格出列,我不应该? ,它是一个静态表格视图。

【问题讨论】:

    标签: ios objective-c uitableview uiviewcontroller


    【解决方案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);
    }
    

    【讨论】:

    • 完美。非常感谢。
    • 但是对于第二种方法,当我尝试通过情节提要实例化 tvc1 时,此时 tvc1 已经显示并已加载。为什么它不显示文本字段?
    • 当您实例化视图控制器时,它会创建该类的一个新实例——而不是您更新的那个
    【解决方案2】:

    根据- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 流它仍然没有分配它的出口所以......

    此时未加载UIViewController。 您需要设置 @property 值并在 viewDidLoad() 方法中访问它 并相应地设置您的 textFiled 文本。

    【讨论】:

      猜你喜欢
      • 2013-03-20
      • 1970-01-01
      • 2014-02-10
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 2012-10-28
      • 2017-12-27
      相关资源
      最近更新 更多