从app delegate访问viewController属性

时间:2013-02-22 09:15:29

标签: iphone ios

我对iOS编程很陌生,所以请你好:)我试图谷歌这几个小时现在没有成功。我已经设置了一个iOS主细节项目。

我需要做什么。是在应用调用detailViewController

时更改applicationDidEnterBackground中的标签

这是我在appdelegate applicationDidEnterBackground方法中的错误代码

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

这不起作用。语义问题:在UIViewController类型的对象上找不到lblbrewingtime。 如果我添加一个断点并检查临时指针的结构。我可以看到_lblBrewingTime类型。

您能否指点我如何获取应用程序委托中当前加载的任何视图的属性?

非常感谢你, 映入眼帘, 尼克

2 个答案:

答案 0 :(得分: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的子类。

答案 1 :(得分:0)

这里有些事情:

  1. 您应该在AppDelegate中保留对主控制器的引用并通过此引用访问视图 - 导航控制器中的可见视图控制器可能不是您的视图控制器类,例如因为你导航到另一个视图。

  2. 您可以通过UIViewController界面访问视图控制器。 UIViewController类不知道您的子视图控制器的属性,因此它无法访问_lblBrewingType。您必须使用视图控制器的类名来访问其属性,例如MyViewController * myVc =(MyViewController *)viewController。

  3. _lblBrewingType看起来像是视图控制器的内部变量。要从外部访问它,您必须将其作为属性提供:

  4.   

    // MyViewController.h

         

    @interface MyViewController:UIViewController

         

    {

    UILabel* _lblBrewingType;
    
         

    }

         

    @property(强,非原子)IBOutlet UILabel * lblBrewingType;

    实施:

      

    // MyViewController.m

         

    @implementation MyViewController

         

    @synthesize lblBrewingType;

         

    @end