iOS 5之前的容器视图控制器

时间:2012-09-05 16:38:19

标签: objective-c ios

iOS 5添加了一个很棒的功能,允许您nest UIViewControllers。使用这种模式,我很容易创建一个自定义警报视图 - 我创建了一个半透明视图来使屏幕变暗,并创建了一个自定义视图,其中包含一些我可以与之交互的小部件。我将VC添加为我想要显示的VC的子项,然后将其视图添加为子视图并执行一些动画以将其显示在屏幕上。

不幸的是,我需要支持iOS 4.3。可以做这样的事情,还是我必须直接从我想要显示它的VC管理我的“警报”?

更多信息

因此,如果我在nib中创建一个自定义视图,其文件所有者是“TapView”,并且其子视图是UIButton。我将UIButton操作绑定到TapView中的IBAction。

现在在我的MainControllerView中,我简单地添加了TapView:

TapView *tapView = [[TapView alloc] init];
[[self view] addSubview:tapView];

我看到了TapView,但我无法与其上的UIButton进行交互,并且可以与隐藏在其后面的M​​ainControllerView上的UIButton进行交互。出于某种原因,我不知道我错过了什么......

2 个答案:

答案 0 :(得分:0)

不确定这是否有帮助,但是,在我需要更多控制潜在的几个控制器的情况下,我已经实现了一个模式,我有一个“主”控制器对象(不需要从UIViewController后代) ),它实现了一个委托协议(在它自己的文件中单独声明),然后让我需要挂钩的任何其他控制器声明该类型的对象作为委托,并且主人可以做任何它需要做的任何事情来响应来自控制器和代表的消息,无论您需要什么点;在您的情况下,显示警报并充当其委托来处理按钮选择。我发现这种方法非常有效,更简单,通常更清洁。 YMMV; - )

答案 1 :(得分:0)

REGD。第二个查询,您尝试使用nib创建自定义视图。不要更改FileOwner类型,而是为顶级视图对象的class属性设置“TapView”。

完成此操作后,您在建立连接时可能会遇到困难。为此,只需手动选择TapView文件即可建立连接。

此外,要加载视图,您需要加载其nib文件。您可以在TapView类中创建类级别辅助方法,如下所示

+(TapView *) getInstance
{
    NSArray *bundle = [[NSBundle mainBundle] loadNibNamed:@"TapView" owner:self options:nil];

    TapView *view;
    for (id object in bundle) {
        if ([object isKindOfClass:[TapView class]]) {
            view = (TapView *) object;

            break;
        }
    }

    return view;
}

现在,你得到了一个像这样的视图对象

TapView *tapView = [TapView getInstance];