如何在导航控制器的根目录上设置UITextField文本?

时间:2013-11-25 18:53:03

标签: ios objective-c uiviewcontroller uitextfield

要获得一个引用,那就是位于导航控制器根目录的UIViewController,我这样做:

UIViewController *root = (UIViewController *)[self.navigationController.viewControllers objectAtIndex:0];

一旦我有了这个参考,我如何在该根视图上的UITextField中设置文本?我尝试了以下但是它不起作用:

NSString *str = @"";
[[root txtID] setText:str];

Xcode显示错误:“'UIViewController'没有可见的@interface'声明选择器'txtID'”。

3 个答案:

答案 0 :(得分:1)

问题在于这一行:

UIViewController *root = (UIViewController *)[self.navigationController.viewControllers objectAtIndex:0];

您想引用根控制器的实际类。类似的东西:

MyRootViewController *root = (MyRootViewController *)[self.navigationController.viewControllers objectAtIndex:0];

MyRootViewController替换为根控制器的类的实际名称 - 具有txtID属性的类。

答案 1 :(得分:0)

你应该使用自定义类而不是'UIViewController'...然后在.h文件链接@property那里..应该这样做......

答案 2 :(得分:0)

如果您的根视图控制器上只有一个文本字段,则可以在根视图中预览所有子视图,并检查它是否为UITextField的类型:

    UIViewController *root = (UIViewController *)[self.navigationController.viewControllers objectAtIndex:0];
    for (UIView *v in [root.view subviews])
    {
        if ([v isKindOfClass:[UITextField class]])
        {
            UITextField *textField = (UITextField*)v;
            [textField setText:@"My text to set up"];
        }
    }

但是如果你的根视图控制器上有更多的TextFields,你应该按标签识别它,并在更新文本之前对它进行比较。