UITabBar - 使用Storyboard的两个视图(笔尖)相同的类

all*_*ire 5 iphone objective-c ios

我正在使用iOS 5和Storyboard.我UITabBar是使用Interface Builder创建的.我的两个相似的项目TabBar是相同的列表,只是其中包含不同类型的项目.我所做的,但看起来很奇怪,是为每个UITableView和在中设置一个不同的"标签" viewDidLoad,然后根据标签分配正确的类型.

- (void)viewDidLoad
{
    [super viewDidLoad];

    if (self.tableView.tag == 1)
    {
        type = @"lent";
    }
    else if (self.tableView.tag == 2)
    {
        type = @"borrowed";
    }
}
Run Code Online (Sandbox Code Playgroud)

有更好的方法吗?我没有创建我UITabBar的代码,所以我AppDelegate很空!我设置的类型只是我的一个核心数据实体中的一个属性,在列表中我有借用项目,另一个我有借用项目,但它们是同一个实体.

jrt*_*ton 3

您可以将该类型公开为公共视图控制器上的属性,并在选择相关选项卡栏项目时设置它(tabBarController:didSelectViewController: 来自 UITabBarControllerDelegate 协议 - 您的应用程序委托将是选项卡栏控制器委托)。

您可以按如下方式进行设置。声明您的应用程序委托符合 UITabBarControllerDelegate 协议,然后将其设置为选项卡栏控制器的委托(您必须在代码中执行此操作,因为应用程序委托无法在故事板中连接)。在您的 applicationDidFinishLaunching 中,在返回 YES 之前添加以下内容:

UITabBarController *tbc = (UITabBarController*)self.window.rootViewController;
tbc.delegate = self;
Run Code Online (Sandbox Code Playgroud)

然后实现以下委托方法:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{

    switch (tabBarController.tabBar.selectedItem.tag)
    {
        case 1:
            viewController.property = @"propertyA";
            break;
        case 2:
            viewController.property = @"propertyB";
            break;
    }

    NSLog(@"view controller is %@",viewController);

}
Run Code Online (Sandbox Code Playgroud)

您需要将 viewController 变量转换为实际的视图控制器类,并将相关标签分配给每个视图控制器的选项卡栏项目。