【问题标题】:Access everywhere to an UIImageView added under UIWindow随处访问在 UIWindow 下添加的 UIImageView
【发布时间】:2011-03-30 22:08:04
【问题描述】:

在我的应用启动委托中,我有以下代码:

[window addSubview:[myTabBarController view]];

UIImageView *banner = 
     [[[UIImageView alloc] initWithFrame:CGRectMake(0,381,320,50)] autorelease];
banner.backgroundColor = [UIColor redColor]; 

[window addSubview:banner];
[window makeKeyAndVisible];

这按预期工作。标签栏可见,我的UIImageView 也是可见的。

我需要在我的应用程序的任何地方修改 UIImageView(我有 TabBarControllerNavigationControllerUITableView 等)

例如,我想在单击UITableCell 时更改背景颜色。

我尝试了所有方法:self.window.view.subviewsatObjectIndex,似乎都没有获得当前的背景颜色。

【问题讨论】:

    标签: iphone uiimageview uiimage subview uiwindow


    【解决方案1】:

    首先,如果只是设置背景颜色,则不需要 UIImageView。一个 UIView 就足够了。

    要解决您的问题,您可以在 AppDelegate 中保留对要更改背景颜色的视图的引用。然后,您可以从应用程序中的任何位置访问您的 AppDelegate(以及对您的视图的引用),如下所示:

    ((YouAppDelegateName*)[UIApplication sharedApplication].delegate).yourViewReferenceProperty
    

    【讨论】:

    • 谢谢,我在我的 appdelegate 中添加了一个属性,并用你的代码修改它
    【解决方案2】:

    您确定要这样做吗?

    通常最好安排您的应用程序,以便操作视图控制器的视图层次结构的唯一对象是该视图控制器。如果其他对象想要更改某些内容,它们要么更改数据模型,要么向视图控制器发送消息。所以,你可以给你的视图控制器一个“背景颜色”属性,它的设置器会更新适当的视图。通过视图控制器间接设置背景颜色可以让您在以后更轻松地更改视图层次结构,并且通常可以让事情更有条理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多