我有这个代码,它根据在表视图中选择的选项将子视图设置为某个ViewController的视图。这是代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self setMainView:[[[self controllerArray] objectAtIndex:[indexPath row]] view]];
[self setCurrentViewController:[indexPath row]];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
最初添加子视图的代码如下所示:
[self setMainView:[[[self controllerArray] objectAtIndex:0] view]];
[[self view] addSubview:[self mainView]]
问题是更改子视图的代码不会更新子视图,因此视图永远不会实际加载。我可以通过从子视图([[self mainView] removeFromSuperview]
)中删除视图来重新加载视图,但这会导致它在中心加载。子视图可以根据用户手势移动,我想将它保存在同一个地方。有没有办法重新加载子视图或我必须跟踪子视图的位置,然后在删除它并再次添加后设置它。
修改 一个有趣的说明: 此代码完美地工作(视图保持在先前的坐标处):
[[self mainView] removeFromSuperview];
[self setMainView:[[[self controllerArray] objectAtIndex:[indexPath row]] view]];
[[self view] addSubview:[self mainView]];
[self setCurrentViewController:[indexPath row]];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
除了第一次切换视图外。我可以设置一次坐标,但有更快的方法,所以每次我想切换时都不需要删除和添加视图。
答案 0 :(得分:0)
这可以解决问题吗?
[[self mainView] removeFromSuperview];
[self setMainView:[[[self controllerArray] objectAtIndex:[indexPath row]] view]];
[self addSubview:[self mainView]];
[self setCurrentViewController:[indexPath row]];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
EDIT1: 如果它只是您要重置的位置,您可以添加属性CGRect originalFrame,并在添加了子视图的代码中添加:
[self setMainView:[[[self controllerArray] objectAtIndex:0] view]];
[[self view] addSubview:[self mainView]];
self.originalFrame = [self mainView].frame;
然后当你想重置位置时使用:
[[self mainView] setFrame:self.originalFrame];
EDIT2: 也许使用视图的“隐藏”属性就足够了?这样你就可以将它们全部保存为子视图,但只有一个可见,如此
[self mainView].hidden = YES;
[self setMainView:[[[self controllerArray] objectAtIndex:[indexPath row]] view]];
[self mainView].hidden = NO;
[self setCurrentViewController:[indexPath row]];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
请记住在开始时添加所有子视图,并将隐藏在其上的设置为YES,除了您希望首先显示的视图。