从AppDelegate更改UI

时间:2011-12-25 04:57:12

标签: ios methods uiviewcontroller uitextview uiapplicationdelegate

当应用程序完成启动时,我尝试从AppDelegate设置UITextView。 实际上我只想打开一个文件并将其内容传递给UITextView。

在我的ViewController中,我添加了以下方法:

ViewController.h:

@interface
{
    IBOutlet UITextView *textView;
}    
- (void)openFile:(NSString *)myString;

ViewController.m:

- (void)openFile:(NSString *)myString
{
    textView.text = myString;
}

在我的AppDelegate中有以下内容:

AppDelegate.m:

#import "ViewController.h"
@implementation AppDelegate
- (BOOL)application: [...] didFinishLaunchingWithOptions: [...]
{
    ViewController *test = [[ViewController alloc] init];
    [test openFile:@"this is a test"];
}

当我尝试从我的AppDelegate调用该方法时,它实际上被调用并按预期传递字符串。 我通过NSLog(@"%@", myString);进行了测试。

textView的价值不会改变。 首先我认为可能还有另一个问题,所以我在加载视图等之后用UIButton调用了该方法。但是一切正常并且textView发生了变化。

然后我想,在从AppDelegate调用我的方法后,可能会加载视图。 我放了几个NSLogs,事实证明,视图已完全加载,然后我的AppDelegate调用该方法。

因此AppDelegate在视图完全加载并且传递String后调用[test openFile:(NSString *)]。但是我的textView的价值仍未改变。

对此有何建议? 你们有没有遇到同样的问题?

2 个答案:

答案 0 :(得分:1)

您没有为ViewController加载任何视图。所以插座没有任何连接。如果从NIB(xib)文件加载视图和ViewController,则不必创建ViewController的另一个实例。这就是你在分配和初始化一个新的ViewController时所做的事情,创建一个连接到任何东西的新实例。

由于存在IBOutlet,我认为有一个xib文件。尝试像

这样的东西
- (BOOL)application: [...] didFinishLaunchingWithOptions: [...]
{
    ViewController *test = [[ViewController alloc] initWithNibName:@"YourXibName" 
                                 boundle:nil  ];
    [test openFile:@"this is a test"]; 
    self.window.rootViewController = test.view ;
    [self.window makeKeyAndVisible];
    return YES;
}

答案 1 :(得分:0)

不完全是我需要的。但是你给了我正确的想法。 非常感谢!

self.viewController = [[test3ViewController alloc] initWithNibName:@"YourXibName" bundle:nil]; 
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
[self.viewController openFile:@"Der Test"];