0

我目前正在开发一个 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 或占位符视图,我很开放 :)

4

1 回答 1

1

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

UIButton *yourButton = [[UIButton alloc] init];
[yourButton addTarget:self action:@selector(myMethod:) forControlEvents:UIControlEventTouchUpInside]
于 2013-10-26T13:34:54.663 回答