1

ViewControllerAppDelegate.mからlabel.textを設定する必要がありますが、何らかの理由で設定する必要があります。どうすればよいですか。

私はこのコードを試しましたが、成功しませんでした:

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    HomeViewController *home = [[HomeViewController alloc] init];
    home.dateCreatedLabel.text = @"date createdddd";
}

これをAppDelegateに配置する必要がある理由は、WebサイトからJSONを取得しているためです。また、applicationWillEnterForeground:更新を毎回チェックするためにこれを実行する必要があり、Core Dataの更新を解決しましたが、label.textを変更する方法はありません。

または、どのように強制的HomeViewControllerに更新できますか?

4

2 に答える 2

2

まず第一に、他のいくつかの回答に応えて、パブリック インターフェイスで特定の UI コンポーネントをビューまたはビュー コントローラーに公開することは、実際には悪い考えではありません。

たとえば、Apple は、ラベルとビューを直接公開することでテーブル ビュー セルでこれを開始しました。これは、開発者にとってより簡単で柔軟性があるためです。textLabelそのため、以前はメソッドしかありませんでしたが、現在はプロパティがありますsetText:。これは、ラベル テキストを設定できるだけでなく、ラベル自体に必要なその他の項目をカスタマイズできることを意味します。

あなたの場合、ラベルをView Controllerの標準プロパティとして公開し、アプリデリゲートからアクセスできます。ただし、アクセスする前に、View Controller のビューが読み込まれていることを確認する必要があります。読み込まれていない場合、label プロパティは nil を返します。-viewコントローラーでメソッドをクエリするだけで、ビューを強制的にロードできます。

// force view to load
[viewController view];
// and now access the label
viewController.label.text = @"whatever";

アプリデリゲートからビューコントローラーへの参照/ポインターを取得する方法を理解する必要がある場合は、ルートビューコントローラーのプロパティに飛び込むか、アプリデリゲートがデリゲートインターフェイスを実装できるようにデリゲートを使用できる必要がありますラベルのテキストを指定します。

編集:

サンプルコードを使用した更新に応じて、ラベルにアクセスする前にこれを行う必要があるようです:

// force view to load
[home view];
home.dateCreatedLabel.text = @"date createdddd";

ただし、警告の 1 つ: ビュー コントローラーがメモリ警告のためにアンロードされた場合、以前に設定したテキストは失われます。

プロパティを使用してView Controllerに日付を設定しNSDate、プロパティが変更されたときにView Controllerにラベルのテキストを設定させ、-viewDidLoad.

于 2012-05-07T10:56:36.517 に答える
-1

viewController の .h ファイルと appdelegate.m にそのプロパティを 1 つ作成するだけです。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

このメソッドでは、viewController の初期化時にプロパティを割り当てます。

于 2012-05-07T10:34:51.183 に答える