2011-08-11 32 views
0

我有一个视图,其中有一个标签栏和一个表格视图。在某个时候,我称之为模态视图,当我忽略它时,原始视图似乎伸展或向下移动,因为背景图像较低,并且表视图较长,直到最后一个单元超出帧的位置。解散modalview后UITableView和背景图像向下移动

我所说的模态视图从tableView:didSelectRowAtIndexPath

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSMutableDictionary *row  = [[[[self.productDetails valueForKey:@"sections"] objectAtIndex:indexPath.section] valueForKey:@"rows"] objectAtIndex:indexPath.row]; 
    NSMutableDictionary *post  = [self.productDetails valueForKey:@"post"]; 
    if ([[row valueForKey:@"type"] isEqualToString:@"pick"]) 
    { 
     self.xPicker    = nil; 
     self.xPicker.options  = nil; 
     self.pickerOptions   = nil; 
     self.xPicker    = [[[TablePicker alloc] initWithNibName:@"TablePicker" bundle:[NSBundle mainBundle]] autorelease]; 
     NSMutableDictionary *newPicker = [[[NSMutableDictionary alloc] init] autorelease]; 
     [newPicker setValue:[NSString stringWithFormat:@"%d", indexPath.section] forKey:@"section"]; 
     [newPicker setValue:[NSString stringWithFormat:@"%d", indexPath.row] forKey:@"row"]; 
     [newPicker setValue:[row valueForKey:@"options"] forKey:@"options"]; 
     [newPicker setValue:[row valueForKey:@"value"] forKey:@"value"]; 
     self.xPicker.options  = [NSMutableDictionary dictionaryWithDictionary:newPicker]; 
     self.pickerOptions   = [NSDictionary dictionaryWithDictionary:newPicker]; 
     self.xPicker.view.frame  = self.view.bounds; 
     [self presentModalViewController:self.xPicker animated:YES]; 
    } 
} 

里面的模态视图控制器,我做一些东西,然后触发一个通知,让家长控制器知道它的确定将其关闭。这部分感觉不对,但我偶尔得到一个错误,当我有模式的看法呼叫:

[self.parentViewController dismissModalViewControllerAnimated:YES]; 

不管怎么说,代码块,我解雇模态视图如下:

- (void) reloadCell 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
    if (self.xPicker.choice != nil) 
    { 
     NSDictionary *choice  = self.xPicker.choice; 
     NSMutableDictionary *row = [[[[self.productDetails valueForKey:@"sections"] objectAtIndex:[[choice valueForKey:@"section"] intValue]] valueForKey:@"rows"] objectAtIndex:[[choice valueForKey:@"row"] intValue]]; 
     [row setObject:[choice valueForKey:@"value"] forKey:@"value"]; 
     [[self.productDetails valueForKey:@"post"] setObject:[choice valueForKey:@"value"] forKey:[row valueForKey:@"key"]]; 
     Request *xReq    = [[[Request alloc] init] autorelease]; 
     [NSThread detachNewThreadSelector:@selector(updateOrderFromProductDetails:) toTarget:xReq withObject:[self.productDetails valueForKey:@"post"]]; 
     self.xPicker    = nil; 
    } 
} 

我不知道它是否相关,但是我发现有趣的是,当我在设备处于横向模式时展示这个模式控制器时,视图变得不可思议。

有谁知道如何解决这个问题?

编辑:经过一番搜索,看来,这两个问题是相关的,有我的当前视图控制器是另一个视图控制器的子视图做,但不是通过导航控制器。

据我了解,我决定不使用导航控制器会让我的视图堆栈产生混淆。我有一种感觉会回来咬我的屁股。

不幸的是,我似乎无法找到解决我的问题的任何地方。

+0

表视图的框架必定有问题。你能发布你的整个实现(.m)文件吗? –

+0

你有任何导航控制器或工具栏? –

+0

因此,当你调用[myTableView reloadData]框架会变得混乱(意味着它超出了你的内容视图的底部)? –

回答

0

好的,我有一个解决这个问题的方法。

而是有我的当前视图控制器的呼叫presentModalViewController的,我把它从的appDelegate tabBarController像这样:

[[(myAppDelegate *)[[UIApplication sharedApplication] delegate] tabBarController] presentModalViewController:self.myModalViewController animated:YES]; 

这仍然感觉有点哈克,但它解决了

1)这两个问题当模态视图被解除时调整大小

2)模式视图无法在横向模式下弹出

我希望这可以帮助别人在这个残酷的苹果世界。

-1

当你的主视图回来,试着加入:

[myTableView setFrame:CGRectMake(0,0,320,411)];

+1

谢谢,但该解决方案有点过于静态。根据我的经验,调整到精确的尺寸往往会导致不必要的意外。我正在寻找一种解决方案,以防止首先出现转移。 – story

0

如果你有意见相关的笔尖 - 进入笔尖为每个视图,并在每个笔尖主视图设置以下属性:

状态栏:未指定

顶栏:不详

底栏:未指定

在尺寸

然后: X:0,Y:0,W:320,H480

在分配每个视图后回到代码中,还在每个视图上将'wantsFullScreenLayout'属性设置为TRUE。

编辑:(?也许:-))解释

如果你有在笔尖指定一个状态栏,则UIKit的自动调整你的意见,以应付状态栏(你会看到你的查看yorigin为0,笔尖高度为460),但如果您在viewDidAppear方法中查看框架中的偏移/高度,则将其设置为20/460以迎合状态栏。

出于某种原因,呈现模态视图控制器似乎与此混乱,并再次调整状态栏,将视图向下移动另一个20.将状态栏设置为未指定,并设置wantsFullScreen布局停止uikit与您的框架混合,并让您控制(因此在笔尖尺寸中将高度设置为480)。

您还需要将所有视图元素向下移动20以满足480高度视图中的状态栏高度。

+0

对不起,如果我只是无知,但我不明白这将提供一个解决方案。 – story

+0

编辑我的答案,试图解释 – gamozzii

+0

谢谢你的尝试,但这并没有改变任何东西。它也像是掩盖了一些更严重的潜在问题,这正是我想要处理的。 – story