未调用 Sub-ViewController 上的 TouchesBegan

Posted

技术标签:

【中文标题】未调用 Sub-ViewController 上的 TouchesBegan【英文标题】:TouchesBegan on a Sub-ViewController not getting called 【发布时间】:2011-05-25 15:29:16 【问题描述】:

我有一个 ViewController 可以响应一些 touchEvents(touchesBegan、touchesMoved 等...)。

我发现当我使用 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];

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

另外,有没有更好的方法来解决这个问题?我知道我可能已经为子视图使用了 View 子类,但它应该使用 Nib,我不知道如何在不使用 ViewController 的情况下处理它。

【问题讨论】:

【参考方案1】:

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

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

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

然后选择内部视图,转到身份检查器。就是那种看起来像小身份证的那种。

第一个字段称为自定义类

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

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

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

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

请编辑,并不是要投反对票。除非您进行编辑,否则我无法删除它。

以上是关于未调用 Sub-ViewController 上的 TouchesBegan的主要内容,如果未能解决你的问题,请参考以下文章

LiveSearchGridPanel ExtJS 的 FiltersFeature 上的“无法调用未定义的方法 'getColumns'”

未处理的异常,glGenVertexArrays 调用上的访问冲突

未调用 IIViewDeckController 的中心 viewController 的 childViewController 上的 viewWillAppear

致命错误:未捕获的错误:调用 bool 上的成员函数 execute() [重复]

在破坏调用期间从另一个线程未定义的行为调用对象上的方法?

MVC 中的下拉菜单未加载 WCF 服务调用的编辑函数上的数据