我有一个名为pfTableViewController
的自定义表格视图控制器和一个名为customTableViewCell
的自定义单元格。
在customTableViewCell
内部,我尝试访问NSMutableArray
的{{1}}:
pfTableViewController
我使用superview两次因为第一个调用- (IBAction)changeEditing:(UITextField *)sender {
pfTableViewController *pfWin = (pfTableViewController *) self.superview.superview;
[pfWin.pfFields replaceObjectAtIndex: myId withObject: @"some text"];
}
而第二个调用UITableView
但是它没有发生,我得到这个错误:
2013-04-17 09:48:38.017 webgopher [21757:907] - [UIViewControllerWrapperView pfFields]:无法识别的选择器发送到实例0x1d590d90
知道这里发生了什么吗?
如果我再使用一个超级视图,它会访问pfTableViewController
,我觉得这太过分了!
答案 0 :(得分:0)
在像superview.superview
这样的Apple实现的视图上使用类似UITableViewCell
的内容是一个非常糟糕的主意。您依赖于不更改的视图层次结构。这种事情在iOS版本之间很容易破解。
您还假设表视图的超级视图是视图控制器的实例。但视图控制器实例不是视图,也不是视图层次结构的一部分。相反,您将获得一个包含视图控制器视图的私有Apple视图。
您应该在您的单元格上实现某种由视图控制器实现的委托方法。通过这种方式,可以直接向视图控制器通知您的“changeEditing”事件,而无需爬网私有视图层次结构。
答案 1 :(得分:0)
您无法直接从其视图访问控制器。您需要通过响应者链查找第一个控制器。这篇文章可能很有用.-
How to get UIViewController of a UIView's superView in iPhone SDK?