Iphone 在未被调用的子ViewController上开始触摸

Iphone 在未被调用的子ViewController上开始触摸,iphone,ios,uiviewcontroller,Iphone,Ios,Uiviewcontroller,我有一个ViewController,它可以响应一些touchEvents(TouchsBegind、TouchsMoved等) 我发现,当我使用presentModalViewController显示此控制器时:它工作正常,但我尝试将其视图添加为另一个ParentViewController的子视图,如下所示: - (void)viewDidLoad { [super viewDidLoad]; //Add SubController controller = [[S

我有一个ViewController,它可以响应一些touchEvents(TouchsBegind、TouchsMoved等)

我发现,当我使用presentModalViewController显示此控制器时:它工作正常,但我尝试将其视图添加为另一个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];
}
当我这样做时,它被添加到父视图中,但它不再响应触摸事件。有办法解决这个问题吗


还有,有没有更好的办法?我知道我可能会在子视图中使用视图子类,但它应该使用Nib,我不知道如何在不使用ViewController的情况下处理它。

要将Nib直接加载到视图中:

// 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];

您可以尝试在子视图中调用
becomeFirstResponder
,查看它是否接收到
触摸开始
。。。可能是这样,但它也可能使superview不接收
touchsbegind
,如果您需要它…

您是正确的,应该使用UIView子类

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

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

  • 然后在选中视图的情况下,转到identity inspector。它看起来像一张小小的身份证

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

  • 在此处键入UIView子类的名称

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

在UIView子类中,您可能希望覆盖

-(void)awakeFromNib
这将在nib首次解包时调用


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

请编辑,我无意否决投票。除非你编辑,否则我无法删除它。