Subches ViewController上的TouchesBegan没有被调用

时间:2011-05-25 15:29:17

标签: iphone ios uiviewcontroller

我有一个ViewController响应一些touchEvents(touchesBegan,touchesMoved等等)。

我发现当我使用presentModalViewController显示这个控制器时:它工作得很好,但我试图将它的View添加为另一个ParentViewController的子视图,如下所示:

- (void)viewDidLoad
{
    [super viewDidLoad];

    //Add SubController
    controller = [[SubViewController alloc] initWithNibName:@"SubViewController" bundle:nil];
    controller.view.frame = CGRectMake(0, 30, 300, 130);
    [view addSubview:controller.view];
    [controller release];
}

当我这样做时,会添加父视图,但它不再响应触摸事件。有办法解决这个问题吗?

此外,还有更好的方法吗?我知道我可能已经在子视图中使用了View子类,但它应该使用Nib而我不知道如何在不使用ViewController的情况下处理它。

3 个答案:

答案 0 :(得分:2)

你是对的,你应该使用UIView子类。

从笔尖加载它的最简单方法是在子笔中包含子视图。

  • 只需将UIView放入连接到原始视图控制器的视图中即可。

  • 然后选择内部视图转到身份检查器。这是一张看起来像一张小身份证的人。

  • 第一个字段称为自定义类

  • 在此输入您的UIView 子类的名称。

如果您需要参考,只需在原始视图控制器中创建一个IBOutlet并将其连接起来。这样您就可以设置hidden = YES直到需要它为止。

在你的UIView子类中,你可能想要覆盖

- (void)awakeFromNib 当nib首先解压缩时会调用它。

用于设置任何手势识别器等

答案 1 :(得分:1)

将笔尖直接加载到视图中:

// Get the views created inside this xib
NSArray *views = [NSBundle mainBundle] loadNibNamed:@"myViewNib" owner:nil];

// There's probably only one in there, lets get it
UIView *myView = [views objectAtIndex:0];

// Do stuff . . .
[[self view] addSubview:myView];

答案 2 :(得分:0)

您可以尝试在子视图中调用becomeFirstResponder并查看它是否收到touchesBegan ...可能是这样,但如果超级视图未收到touchesBegan,也可能你需要它......