我试过亚历克斯的建议买UIViewController类别,它在模拟器,但不是在我的手机。这里是类别
@interface UIViewController (parentSetter)
-(void)setParentUIViewController:(UIViewController*)parent;
@end
@implementation UIViewController (parentSetter)
-(void)setParentUIViewController:(UIViewController*)parent
{
_parentViewController = parent;
}
@end
它编译和工作正常,但注意下划线成员是有点偏离。 这是在针对3.0 SDK编译时导致链接器错误的原因。
我有一个容器视图,有2个子视图,表是其中之一。该表需要一个父项,以便可以与导航栏进行交互等等。
我用这个方法,而不是去:
@interface AdoptedTableViewController : UITableViewController {
UIViewController* surrogateParent;
}
-(UINavigationController*)navigationController;
@property (nonatomic, assign) IBOutlet UIViewController *surrogateParent;
@end
@implementation AdoptedTableViewController
@synthesize surrogateParent;
-(UINavigationController*)navigationController
{
if([super navigationController])//self.navigationController)
{
return [super navigationController];
}
else
{
return surrogateParent.navigationController;
}
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
我所有的表视图控制器现在adoptedTableViewControllers。他们需要父母的主要原因是他们可以将视图控制器推到导航堆栈上,以便通过导航控制器获取器进行透明处理。
这将是很好,如果parentViewController不只是只读,但在我的涉足_parentViewController我发现有更多的ViewController层次结构不只是该属性。我认为这种关系中可能存在着许多耦合和责任,苹果没有为群众清理足够的空间。例如,当我向上移动我无法修复的导航层次结构时,我注意到一个奇怪的取消选择行为。也许UINavigation控制器反映他们的顶级控制器的类别,行为有所不同?
总之,它确实是只读的,没有干净或简单的解决方法。你只需要围绕它构建。
我认为谁投下每个答案在这个线程可以给出一个理由:) – willcodejavaforfood 2010-02-17 09:25:31
这不是我,但我怀疑他们不同意使用私人API,并投票下来使用私人API的建议似乎是在SO上通用。也许他们是苹果痣。 – 2010-05-29 03:43:28