我有一个名为320x144
的小SubViewController.h
视图控件,其中有一个UITableView,其中包含3个单元格的单元格。我已经使tableView不可滚动,并且在CALayer
的宽限度下在tableView后面添加了一些阴影效果。
在另一个名为MainViewController.m的viewcontroller中,我已将SubViewController.h
作为子视图添加到此MainViewController
。使用UIPanGestureRecognizer
我已经成功地将SubViewContoller拖动到我想要的任何地方。
我使用UIBarButtonItem
显示此子视图。在子视图的tableView中选择一个单元格后,我使用一些动画从主视图中消失。
一切正常。
但是当我拖动子视图然后尝试选择一个单元格时,我必须点击该单元格两次。在第一次点击时,实际上没有任何实际发生,除了单元格变为蓝色(就像它在tableView中选择单元格时通常会发生)但不会隐藏。如果我再次点击它,它将被隐藏。
在不拖动子视图的情况下,我可以通过单次触摸选择一个单元格,并且视图也会隐藏。
我编写了用于在子视图的didSelectRowAtIndexPath:
方法中隐藏子视图的代码。并且我在拖动子视图后第一次选择时没有调用此方法。在第二次点击或触摸时,它被调用。再次,如果用户再次移动子视图,则会出现同样的问题。
当拖动时,子视图的某些属性发生了变化,我无法弄清楚。
答案 0 :(得分:0)
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
NSUInteger tapCount = [touch tapCount];
switch (tapCount) {
case 1:
[self performSelector:@selector(singleTapMethod) withObject:nil afterDelay:.4];
break;
case 2:
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(singleTapMethod) object:nil];
[self performSelector:@selector(doubleTapMethod) withObject:nil afterDelay:.4];
break;
. . .
}
答案 1 :(得分:0)
首先,当你想要显示你的subView时,点击你的UIBarButtonItem:
-(IBAction)buttonClick
{
//setup ur view dynamically as you like//
PSview=[[UIView alloc]initWithFrame:CGRectMake(5, 5, 310,450)];
PSview.backgroundColor=[UIColor blackColor];
PSview.alpha=0.8;
[PSview.layer setBorderColor: [[UIColor whiteColor] CGColor]];
[PSview.layer setBorderWidth: 3.0];
PSview.contentMode=UIViewContentModeScaleAspectFill;
PSview.clipsToBounds=YES;
[PSview.layer setBorderColor: [[UIColor whiteColor] CGColor]];
[PSview.layer setBorderWidth: 3.0];
[PSview addSubview:subView];
[self.view addSubview:PSview];
}
然后:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//since there are two tables in one view, you can differentiate them using if()
if(tableView==subView)
{
// ...ur code . ..
// write your code what needs to happen when you click a row of your subView.
[PSview removeFromSuperview];
}
if(tableView==mainView)
{
// write your code , what happens when user clicks row of the main table
}
}