使用 awakeAfterUsingCoder 方法查看占位符替换为 xib



我目前正在开发一个iOS应用程序,该应用程序具有多个xib,其中包含一个UIView子类,该子类充当屏幕标题的占位符。当视图控制器从其笔尖加载时,它们将实例化 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 操作。问题是我将"控制器"作为所有者传递给实例化所有者:选项:方法。但是这个控制器是零的。因此,无法处理菜单按钮上的触摸事件。

所以现在我正在寻找一种正确设置"控制器"属性的方法。目前,在我所有的视图控制器xib中,我将占位符标题视图"控制器"出口连接到文件的所有者(即控制器),但它似乎不起作用。

如果您有其他模式要建议,这不会迫使我放弃我的 HeaderView.xib 或占位符视图,我开放:)

我不确定我是否完全理解您的问题,但如果它与您无法通过 IB 设置 IBAction 有关,因为某些内容未加载或您始终可以通过代码设置 IBAction 事件侦听器。

UIButton *yourButton = [[UIButton alloc] init];
[yourButton addTarget:self action:@selector(myMethod:) forControlEvents:UIControlEventTouchUpInside]

最新更新