0

我有一个名为的自定义表格视图控制器pfTableViewController和一个名为customTableViewCell.

从我的内部我尝试customTableViewCell访问:NSMutableArraypfTableViewController

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

我使用了 superview 两次,因为第一个调用 theUITableView而第二个应该调用 thepfTableViewController但它没有发生,我收到此错误:

2013-04-17 09:48:38.017 webgopher[21757:907]-[UIViewControllerWrapperView pfFields]:无法识别的选择器发送到实例 0x1d590d90

知道这里发生了什么吗?

如果我再使用一个超级视图,它会访问UINavigationTransitionView,我认为这太远了!

4

2 回答 2

0

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

如何在 iPhone SDK 中获取 UIView 的 superView 的 UIViewController?

于 2013-04-17T13:23:58.127 回答
0

superview.superview在苹果实现的视图上使用类似的东西UITableViewCell是一个非常糟糕的主意。您依赖于视图层次结构不变。这种事情很容易在iOS版本之间中断。

您还假设表视图的超级视图是您的视图控制器的一个实例。但是视图控制器实例不是视图,也不是视图层次结构的一部分。相反,您将获得一个包含视图控制器视图的私有苹果视图。

您应该在您的单元上实现某种委托方法,该方法由视图控制器实现。这样,视图控制器可以直接通知您的“changeEditing”事件,而无需爬取私有视图层次结构。

于 2013-04-17T13:20:12.050 回答