【问题标题】:Drill down, UITableView and GridView向下钻取,UITableView 和 GridView
【发布时间】:2013-02-20 03:03:25
【问题描述】:

我有一个带有 UITableView 和 NavigationController 的 UIViewController 来实现向下钻取导航系统。用户可以浏览文件夹和文档的层次结构。

我正在使用 NSFetchedResultController 从数据库中填充 UITableView。

我想添加使用 GridView (fe: AQGridView) 浏览层次结构的选项。这个想法是在导航栏上有一个按钮,用于在 表格视图和网格视图。

问题/问题 1:

以编程方式从带有表格的控制器切换到带有网格的控制器的最佳方式是什么?

问题/问题 2:

切换后,如果有其他控制器推入导航控制器, 并且用户返回,这些视图控制器将被呈现而没有任何变化。如何更新这些视图控制器?例如:用户从table切换到grid,然后返回,弹出当前控制器后,用户又看到一个table->错了。

【问题讨论】:

    标签: ios objective-c uitableview gridview drilldown


    【解决方案1】:

    在显示层次结构的顶层(UITableView)的地方,您需要在请求时添加 UITableView 或网格视图作为子视图。

    您可以向视图控制器添加方法:

    -(void)displayAsGridView {
        // hide/remove the table view
        // populate the grid view and display
    }
    
    -(void)displayAsTableView {
        // remove or hide grid view
        // make sure the table view exists, if not, create it
        [self.tableView reloadData];
    }
    

    在表的数据源中:

    -(UITableViewCell*)tableView:(UITaleView*)tableView cellForRowAtIndexPath:(IndexPath*)indexPath {
        // you populate the view cell as you would for any other table
    }
    

    您可以在 IB 中或完全通过代码创建这两者,以最适合您的方式创建。关键是,您不会将其中任何一个推送到导航控制器上,只是为了重新安排信息的显示方式。

    【讨论】:

    • 这样做,我要写很多if...else,不是吗?例如在 NSFetchedResultController 的一些委托方法中。 if (self.displayingAsGridView) updateGrid 否则 updateTable。你能告诉我你的设计是什么吗?谢谢。
    • @louissmr 我不认为你会写出你想的那么多条件。数据在表中的呈现方式应仅在表的委托中处理(它对网格视图一无所知)。对于网格视图也是如此。我会更新一些 sudo 代码。
    • 我明白了,可能我要为网格添加一些委托方法,并在 NSFetchedResultController 委托方法中重写一些代码。谢谢。
    • @louissmr 是的,您会想要分离一些代码,但它们可以(并且可能应该)使用相同的数据源。在您的视图控制器中,当它接收到获取请求的结果时,将其存储在数组或任何合适的数据结构中,即视图控制器的本地数据。我认为NSFetchedResultsController 应该适合两者。它确实是显示不同数据的最后一步。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多