我目前正在开发一个iOS应用程序,它有多个包含UIView子类的xib,它充当屏幕标题的占位符。 从视图控制器加载视图控制器时,它们会实例化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;
}
到目前为止,一切正常。但是现在我需要在标题中添加一个类似于popover的菜单。所以我在HeaderView xib中添加了一个UIButton,正如预期的那样在所有视图控制器中显示,但现在我需要管理该按钮上的触摸。 我添加了一个" - (IBAction)showHeaderMenu"我的基础UIViewController类的方法,我在HeaderView.xib中配置文件的所有者到这个类,所以我可以将按钮触摸动作连接到showHeaderMenu动作。 问题是我正在通过"控制器"作为instantiateWithOwner:options:方法的所有者。但是这个控制器是零。因此,我的菜单按钮上的触摸事件无法处理。
所以现在我正在寻找一种方法来获得"控制器"属性设置正确。在我所有的视图控制器xib中,我连接了占位符headerview" controller"文件所有者(控制器)的出口,但它似乎没有工作。
如果你有一个不同的模式建议,这不会强迫我放弃我的HeaderView.xib或占位符视图,我打开:)
答案 0 :(得分:1)
我不确定我是否确切地解决了您的问题,但是如果它与您无法通过IB设置IBAction有关,因为没有加载某些东西或者您总是可以通过代码设置IBAction事件监听器。
UIButton *yourButton = [[UIButton alloc] init];
[yourButton addTarget:self action:@selector(myMethod:) forControlEvents:UIControlEventTouchUpInside]