我目前正在开发一个 iOS 应用程序,该应用程序具有多个包含 UIView 子类的 xib,该子类充当屏幕标题的占位符。当视图控制器从它们的 nib 加载时,它们会实例化 HeaderView 占位符。在 HeaderView 类中,我有一个用真实视图替换占位符视图的方法,代码如下:
- (id)awakeAfterUsingCoder:(NSCoder *)aDecoder
{
if (![[self subviews] count])
{
if (headerViewNib == nil)
headerViewNib = [UINib frameworkNibWithNibName: @"HeaderView"];
HeaderView * headerView = [[headerViewNib instantiateWithOwner: controller options: nil] lastObject];
[headerView setTranslatesAutoresizingMaskIntoConstraints: NO];
return headerView;
}
return self;
}
到目前为止,一切正常。但是现在我需要在标题中添加一个类似于弹出框的菜单。所以我向 HeaderView xib 添加了一个 UIButton,正如预期的那样,它显示在所有视图控制器中,但现在我需要管理对该按钮的触摸。我在我的基本 UIViewController 类中添加了一个“- (IBAction)showHeaderMenu”方法,并在 HeaderView.xib 中将文件的所有者配置为此类,因此我可以将按钮触摸操作连接到 showHeaderMenu 操作。问题是我将“控制器”作为所有者传递给 instantiateWithOwner:options: 方法。但是这个控制器是零。所以我在菜单按钮上的触摸事件没有被处理。
所以现在我正在寻找一种方法来正确设置“控制器”属性。目前在我所有的视图控制器 xib 中,我将占位符 headerview“控制器”出口连接到文件的所有者(即控制器),但它似乎没有工作。
如果您有不同的建议模式,这不会迫使我放弃我的 HeaderView.xib 或占位符视图,我很开放 :)