0

私はiOSプログラミングにまったく慣れていないので、よろしくお願いします:)これを何時間もグーグルで検索しようとしていますが、成功していません。iOS マスター詳細プロジェクトをセットアップしました。

私は何をする必要がありますか。detailViewControllerアプリが呼び出すときにラベルを変更することですapplicationDidEnterBackground

これは appdelegateapplicationDidEnterBackgroundメソッドの私の不完全なコードです

UIViewController *temp = [self.navigationController visibleViewController];
NSLog(@"%@",[temp nibName]);
if ([temp nibName] == @"DetailViewController") {
    temp._lblBrewingTime = @"";
}

これは機能しません。セマンティックの問題: lblbrewingtimeUIViewController 型のオブジェクトで見つかりません。ブレークポイントを追加して、一時ポインターの構造を確認するとします。型が見えます_lblBrewingTime

アプリ デリゲートに現在読み込まれているビューのプロパティを取得する方法を教えてください。

どうもありがとう、よろしく、ニック

4

2 に答える 2

2

visibleViewController が実際に DetailViewController であることを確認したら、明示的に DetailViewController にキャストする必要があります。だからここに修正があります: -

UIViewController *temp = [self.navigationController visibleViewController];
NSLog(@"%@",[temp nibName]);
if ([temp nibName] == @"DetailViewController") {
DetailViewController* tempDVCObj = (DetailViewController*)temp;
//temp._lblBrewingTime = @"";
tempDVCObj._lblBrewingTime = @"";
}

そして、あなたのプロパティ_lblBrewingTimeはUIViewControllerのプロパティではなく、DetailViewControllerのプロパティ、つまりUIViewControllerのサブクラスであることは絶対に正しいと言っています。

于 2013-02-22T09:25:50.727 に答える
0

ここにいくつかのことがあります:

  1. AppDelegate でメイン コントローラーへの参照を保持し、この参照を介してビューにアクセスする必要があります。別のビューに移動したなどの理由で、ナビゲーション コントローラーで表示されるビュー コントローラーがビュー コントローラー クラスではない場合があります。

  2. UIViewController インターフェイスを介してビュー コントローラーにアクセスします。UIViewController クラスは子ビュー コントローラーのプロパティを認識しないため、_lblBrewingType にアクセスできません。ビュー コントローラーのクラス名を使用して、そのプロパティにアクセスする必要があります (例: MyViewController * myVc = (MyViewController*)viewController)。

  3. _lblBrewingType は、View Controller の内部変数のように見えます。外部からアクセスするには、プロパティとして提供する必要があります。

// MyViewController.h

@interface MyViewController : UIViewController

{

UILabel* _lblBrewingType;

}

@property (強力、非アトミック) IBOutlet UILabel *lblBrewingType;

そして実装:

// MyViewController.m

@実装 MyViewController

@synthesize lblBrewingType;

@終わり

于 2013-02-22T09:25:28.110 に答える