【问题标题】:How do I subclass a UITabbarcontroller using storyboards?如何使用情节提要对 UITabbar 控制器进行子类化?
【发布时间】:2013-01-24 15:08:36
【问题描述】:

我有一个使用情节提要的标签栏应用程序。 Tab 1 是带有 Mapview 的 UIViewController,Tab 2 是 UITableViewController。

appdelegate 调用网络获取(通过自定义类)并获取该网络响应并解析它(通过自定义类),然后将信息放入 CD-db(通过自定义类)。

MapVC 从 CD-db 获取结果并填充一个 NSMutableArray(属性)以循环通过。该数组包含一个带有 2 个坐标的自定义 CD-db 对象,用于在 for 循环中创建 MKAnnotation。计算每个 MKAnnotation 到 userLocation 的距离,并在其 subtitle 属性中使用距离值完成 MyLocation 类对象。因此地图上的每个图钉都显示一个标题(名称)和副标题(距离)。

TableVC 创建对 CD-db 的单独提取并填充其数组属性以在 cellForRowAtIndexPath (CFRAIP) 中使用。

现在我希望表格视图也显示每个单元格中的距离。所以有人建议我继承 uitabbarcontroller 并将 TableVC.tableview 的委托/数据源设置为 MapVC。我的问题是,如何子类化我的 uitabbarcontroller 并设置委托和数据源?

类似于:在应用委托中获取窗口的 rootviewcontroller?

【问题讨论】:

    标签: uitabbarcontroller subclass


    【解决方案1】:

    首先你需要继承UITabBarController。在Xcode中新建一个文件,设置UITabBarController为父类。

    然后转到您的故事板并选择 tabbarcontroller,将其自定义类设置为您刚刚创建的类。

    在 tabVC 的viewDidLoad 中获取其子 VC 并找到您想要的。这是伪代码,我可以稍后整理:

    CSMapListViewController *mapListViewController;
    CSTableViewController *tableViewController;
    
    for (UIViewController *vc in self.viewControllers)
    {
        if ([vc isKindOfClass:[CSMapListViewController class]])
        {
            mapListViewController = (CSMapListViewController *)vc;
        } else if ([vc isKindOfClass:[CSTableViewController class]])
        {
            tableViewController = (CSTableViewController *)vc;
        } 
    }
    
    tableViewController.tableview.datasource = mapListViewController;
    

    希望对您有所帮助。

    【讨论】:

    • 非常感谢,但这如何让我访问在 FirstViewController 中创建的 MyLocation 对象? MyLocation 对象在用户点击“绘图”按钮时创建。
    • 什么是试图访问 mylocation 对象?地图视图控制器?他们就在那里。 tableVC.tableview?它会问它是datasource,它是具有位置数组的mapVC。表VC?好吧,它现在没有直接访问权限,但是您可以使用与上述相同的技术来获取两个 VC 并在您认为合适的时候加入他们。我会发明一个 tableVCDelegate 并定义委托必须具有的方法(例如getLocations),然后将 mapVC 分配为委托并实现该方法。
    • mapVC 在 mapView 上绘制 MyLocation 对象。我需要在 tableview 中显示每个 MyLocation.distance 属性。现在 tableVC.tableview 的数据源是 mapVC。我的 cFRAIP 是 StoreLocation *location = [mapVC.locationArray objectAtIndex:indexPath.row]; cell.nameLabel.text = MyLocation.name; cell.distanceLabel.text = MyLocation.distance; 这不起作用,因为 StoreLocation 对象有经纬度和名称等。 mapVC.locationArray 中有 StoreLocation 对象。但是 MyLocation 是一个 MKAnnotation 对象,由每个 StoreLocation 的 lat 和 long 属性组成。
    • 你现在转向了别的东西。如果您想知道如何从 MyLocation 类中填写 UITableViewCell,您需要提出一个新问题。它使这个问题保持干净,并帮助遇到相同 UITableViewCell 问题的人找到您的问题和解决方案。
    • 同意,所以我又把它移到这里:stackoverflow.com/questions/14441368/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 2014-06-02
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多