未调用 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