【发布时间】:2010-07-15 05:42:07
【问题描述】:
我们正在开发一个使用一些自定义视图的项目。我们有以下层次结构:
UIViewController -> UIScrollView(自定义子类)-> UIView(自定义子类)
我们展示了一个动态生成的按钮网格。当用户点击属于自定义滚动视图的 UIView 之一时,我们会触发如下所示的方法:
- (void)handleTapFrom:(UITapGestureRecognizer *)recognizer {
[[self superview] itemSelected:self];
}
本例中的超级视图是我们自定义的 UIScrollView 子类。从这里我们触发另一个方法:
- (void) itemSelected: (id)selectedItem {
itemView *item = selectedItem;
[[self superview] initSliderViewForItemNamed:item.name];
item = nil;
}
现在事情就在这里破裂了。我们想在 UIViewController 中触发另一个方法来在视图层次结构的顶部加载一个新视图。所以在 UIViewController 我们有这个方法来测试是否成功:
- (void) initSliderViewForItemNamed:(NSString *)selectedItemName {
NSLog(@"Selected item was found! %@",selectedItemName);
}
但我们从来没有达到这一点,应用程序崩溃了。这是因为我们不能在这里引用 UIViewController。相反,我们引用 UIViewController 的 view 属性。所以我们实际的对象层次结构是:
UIViewController.view -> UIScrollView(自定义子类)-> UIView(自定义子类)
这让我想到了两个问题。
- 我们如何从属于控制器视图属性的子视图中引用 UIViewController?
- 此方法是否复杂。有一个更好的方法吗?我们是否应该将 UIViewController 分配为我们自定义的 UIScrollView 子类的委托?
【问题讨论】:
标签: iphone objective-c cocoa delegates uiviewcontroller