Xcode自定义对象的父视图错误



我有一个自定义表视图控制器pfTableViewController和一个自定义单元格customTableViewCell

从我的customTableViewCell内部,我试图访问pfTableViewControllerNSMutableArray:

- (IBAction)changeEditing:(UITextField *)sender {
    pfTableViewController *pfWin = (pfTableViewController *) self.superview.superview;
    [pfWin.pfFields replaceObjectAtIndex: myId withObject: @"some text"];
}

我使用了两次superview,因为第一个调用UITableView,第二个应该调用pfTableViewController,但它没有发生,我得到这个错误:

2013-04-17 09:48:38.017 webgopher[21757:907]-[UIViewControllerWrapperView pfffields]: unrecognized selector sent to instance 0x1d590d90

你知道这是怎么回事吗?

如果我使用更多的父视图,它访问UINavigationTransitionView,我认为这太远了!

在苹果实现的视图(如UITableViewCell)上使用superview.superview是一个非常糟糕的主意。你依赖于视图层次结构不变。这种东西在不同的iOS版本之间很容易被破坏。

你也假设表视图的父视图是你的视图控制器的一个实例。但是视图控制器实例不是视图也不是视图层次结构的一部分。相反,你得到的是一个私有的apple视图,它包装了视图控制器的视图。

你应该在你的cell上实现某种委托方法它是由视图控制器实现的。这样,视图控制器就可以直接收到"changeEditing"事件的通知,而不必爬上私有视图层次。

你不能直接从控制器的视图访问它。您需要通过响应器链查找第一个控制器。这篇文章可能有用。-

如何在iPhone SDK中获得UIView's superView的UIViewController ?

最新更新