我是iPhone开发的新手,我正在修改现有的iPhone应用程序。该问题的高级概述是这样的。
我有一个按钮,显示包含UITableView的弹出窗口。
我想点击菜单项并显示第二个带子项的UITableView,包括后退选项。如果用户单击后退,则会转到原始的UITableView。如果子项下面有其他子项,则应该(单击时)使用这些选项启动另一个UITableView。还有一个后退按钮作为菜单项,允许用户导航到显示的上一个菜单。
这里的挑战是我没有使用导航控制器。原始开发人员只想将UITable Views添加到堆栈,在从一个菜单转到另一个菜单时添加它们之间的转换。我见过并尝试过的大多数教程都使用导航控制器和Interface Builder来关联UITableViews。
现在,我有一个填充菜单的XML数据源,当我点击菜单项时,标题会正确更改,但仍然使用相同的UITableView来显示选项 - 这当然会产生一些后果,因为子项目可能不适合屏幕。
有关如何做到这一点的任何想法?如果有必要,我可以发布一些代码,虽然我认为一般描述应该能够与你们中的一个聪明的人敲响一声!
答案 0 :(得分:1)
爱。这将是一个艰难的。我的建议是维护自己的堆栈实现。然后,使用CoreAnimation从主视图控制器添加/删除UITableViews以获得动画效果。因此,每当用户单击当前表视图中的元素时,相应的控制器将创建一个新的控制器和表视图,然后您的自定义导航控制器将旧的推送到堆栈,从主视图中删除旧的表视图,设置新控制器作为当前控制器,并将新表视图添加到主视图中。有点凌乱,但我认为它会起作用。
答案 1 :(得分:1)
这可以通过多种方式完成。
我选择处理此类配置的方法是使用一个UITableView并仅更改数据源。当您重新加载,插入,删除行或重新加载整个表时,您可以根据当前数据源级别更改所需的任何内容。最简单的无动画方式是重新加载整个表。
a)如果你的“选项”离屏幕高度明智(你想要固定高度)表改变 - (CGFloat)tableview:(UITableView *)表heightForRowAtSection:(NSInteger)部分返回值
b)如果您的“选项”在屏幕外长度方面明智,请使您的单元格的默认textLabel灵活:cell.textLabel.adjustsFontSizeToFitWidth = YES; cell.textLabel.minimumFontSize = 14;或者为每个数据源级别定制单元格(查找子类化UITableViewCell,建议使用)。
对于tableviews或数据源的“堆栈”,您可以使用带有addObject的NSMutableArray和用于pop的removeLastObject。 对于动画,UITableViews可以为它们的行/部分设置动画为3.(请参阅文档中的插入,删除,重新加载 - 行/部分UITableView类参考),对于2.您甚至可以使用UIView(如果不是CoreAnimation作为Grimless建议的)动画,将当前tableview向左移动(setFrame :)并从右侧移动下一个tableview(在动画之前将setFrame设置为off屏幕,然后在beginAnimation-commitAnimation子句中将其移动到位),但请确保在容器视图中添加tableviews(泡泡内部) )剪辑其子视图。