要获得一个引用,那就是位于导航控制器根目录的UIViewController,我这样做:
UIViewController *root = (UIViewController *)[self.navigationController.viewControllers objectAtIndex:0];
一旦我有了这个参考,我如何在该根视图上的UITextField中设置文本?我尝试了以下但是它不起作用:
NSString *str = @"";
[[root txtID] setText:str];
Xcode显示错误:“'UIViewController'没有可见的@interface'声明选择器'txtID'”。
答案 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,你应该按标签识别它,并在更新文本之前对它进行比较。