我对iOS编程很陌生,所以请你好:)我试图谷歌这几个小时现在没有成功。我已经设置了一个iOS主细节项目。
我需要做什么。是在应用调用detailViewController
applicationDidEnterBackground
中的标签
这是我在appdelegate applicationDidEnterBackground
方法中的错误代码
UIViewController *temp = [self.navigationController visibleViewController];
NSLog(@"%@",[temp nibName]);
if ([temp nibName] == @"DetailViewController") {
temp._lblBrewingTime = @"";
}
这不起作用。语义问题:在UIViewController类型的对象上找不到lblbrewingtime
。
如果我添加一个断点并检查临时指针的结构。我可以看到_lblBrewingTime
类型。
您能否指点我如何获取应用程序委托中当前加载的任何视图的属性?
非常感谢你, 映入眼帘, 尼克答案 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)
这里有些事情:
您应该在AppDelegate中保留对主控制器的引用并通过此引用访问视图 - 导航控制器中的可见视图控制器可能不是您的视图控制器类,例如因为你导航到另一个视图。
您可以通过UIViewController界面访问视图控制器。 UIViewController类不知道您的子视图控制器的属性,因此它无法访问_lblBrewingType。您必须使用视图控制器的类名来访问其属性,例如MyViewController * myVc =(MyViewController *)viewController。
_lblBrewingType看起来像是视图控制器的内部变量。要从外部访问它,您必须将其作为属性提供:
// MyViewController.h
@interface MyViewController:UIViewController
{
UILabel* _lblBrewingType;
}
@property(强,非原子)IBOutlet UILabel * lblBrewingType;
实施:
// MyViewController.m
@implementation MyViewController
@synthesize lblBrewingType;
@end