我的问题是跟随
我有一个 UIViewController 子类,它包含一个 UISegmentedController 和四个我在界面构建器中布置的表格视图。
@interface MultiTableHoldingView : UIViewController{
}
@property (strong, nonatomic) IBOutlet DataTV *dsDataTV;
@property (strong, nonatomic) IBOutlet EnviroTV *dsEnvironmentTV;
@property (strong, nonatomic) IBOutlet LocationTV *dsLocationTV;
@property (strong, nonatomic) IBOutlet Note_AnimalTV *dsNoteAnimal;
@property (strong, nonatomic) IBOutlet UISegmentedControl *diveElementSegmentController;
@property (strong, nonatomic) DiveSite* currentSite;
- (IBAction)diveElementSegmentControllerDidChange:(UISegmentedControl *)sender;
-(void) setFreshWaterColor;
-(void) setSaltwaterColor;
@end
setFreshWaterColor 和 setSaltWaterColour 只是设置 MultiTableHoldingView 实例 UIView 及其包含的四个 tableview 的背景颜色属性。当从 MultiTableHoldingView 的 viewDidLoad 方法调用时,这两种方法都可以正常工作。这是其中之一
-(void) setSaltwaterColor{
DLog(@"in set salt water colour");
self.view.backgroundColor= SaltWaterColor;
_dsLocationTV.backgroundColor=SaltWaterColor;
_dsDataTV.backgroundColor=SaltWaterColor;
_dsEnvironmentTV.backgroundColor=SaltWaterColor;
_dsNoteAnimal.backgroundColor=SaltWaterColor;
}
另一个是相同的,除了设置为 FreshWaterColor - 两者都是我设置的#define。
我使用分段控制器来打开和关闭各种表格视图的隐藏属性。一切都很好,很简单。表格视图正在提取他们的数据。工作正常。
在其中一个表视图上选择我的表视图单元格之一时,我想更改我的表视图(实际上是我的所有表视图)和作为超级视图的 UIView 的背景颜色
self.superview.backgroundColor = FreshWaterColor;
可以很好地返回并更改 MultiTableHoldingView 视图背景属性的实例,但我想调用 MultiTableHoldingView 的 setFreshWaterColor 和 setSaltwaterColor 方法的实例。
我已将 MultiTableHoldingViews 标头导入相关的 tableview (EnviroTV),因此它知道它的 superviews 方法。但是,如果我尝试在 self.superview 上调用这两种方法中的任何一种,这些方法都不会显示,并且如果我完整输入它们,我会收到以下错误
“UIView”没有可见界面显示选择器“setFreshWaterColor”
所以我检查了superview是什么类型的对象,它是一个“superview UIViewControllerWrapperView的类”
我搜索这个和它显然“
这是框架使用的私有视图。你不应该修改它或任何东西。”
我显然在这里遗漏了一些东西 - 我应该如何在 MultiTableHoldingView 的实例上调用该方法?
提前致谢
西蒙
Doh - 正如 danypata 在评论中提到的那样,它只是代表 - 我已经在下面发布了我是如何做到这一点的答案。试图尽可能清楚地说明委派的工作方式