我创建了一个简单的应用来测试UIResponder touchesBegan方法。我尝试在点击视图的位置添加带原点的文本字段。
但是我遇到了[UIView addSubview:]这种奇怪的情况,只使用了topches视图下的两个子视图之一,使用了touchesBegan的相同代码段。
单一视图应用程序是使用界面构建器创建的,具有非常简单的视图:
- view controller
|
--view
|
-- view (tag 1)
|
-- view (tag 2)
视图1和视图2的IB设置是相同的。两个视图叠加在一起,一个在另一个上面,两个矩形将纵向iphone视图分成两个相等的部分。
当我执行代码段时,新添加的文本字段仅显示纵向视图顶部的矩形,而不是第二个,无论是视图1还是视图2(我交换了位置)两个子视图只是为了测试)。 NSLog显示两个视图的代码段执行完全相同。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch* tch = [touches anyObject];
UIView* currentView = tch.view;
self.pt = [tch locationInView:self.view];
CGRect rect = CGRectMake(self.pt.x, self.pt.y, 300,30);
UITextField *tf = [[UITextField alloc] initWithFrame:rect];
NSMutableString* str = [[NSMutableString alloc]init];
[str appendString:@"clicked view "];
[str appendString:tg];
tf.text = str;
tf.backgroundColor =[UIColor whiteColor];
[currentView addSubview:tf];
//added after failed to add text field to the second view
[currentView bringSubviewToFront:tf];
}
知道发生了什么以及如何解决它?
答案 0 :(得分:0)
文本字段的框架应该位于您要添加到的视图的坐标系中,而不是self.view的坐标系 - 它适用于顶视图,因为它和自身。视图具有相同的起源。你需要改变self.pt的定义,
self.pt = [tch locationInView:currentView];