Iphone UITabBar-使用故事板的同一类的两个视图(nib)

Iphone UITabBar-使用故事板的同一类的两个视图(nib),iphone,objective-c,ios,Iphone,Objective C,Ios,我正在使用iOS5和故事板。我的uitabar是使用界面生成器创建的。我的TabBar中有两个相似的项目,它们是相同的列表,只是其中的项目类型不同。我所做的,但在我看来很奇怪,是为每个UITableView和viewDidLoad设置不同的“标记”,然后根据标记分配正确的类型 - (void)viewDidLoad { [super viewDidLoad]; if (self.tableView.tag == 1) { type = @"lent";

我正在使用iOS5和故事板。我的
uitabar
是使用界面生成器创建的。我的
TabBar
中有两个相似的项目,它们是相同的列表,只是其中的项目类型不同。我所做的,但在我看来很奇怪,是为每个
UITableView
viewDidLoad
设置不同的“标记”,然后根据标记分配正确的类型

- (void)viewDidLoad
{
    [super viewDidLoad];

    if (self.tableView.tag == 1)
    {
        type = @"lent";
    }
    else if (self.tableView.tag == 2)
    {
        type = @"borrowed";
    }
}

有更好的方法吗?我没有在代码中创建我的
uitabar
,因此我的
AppDelegate
非常空!我设置的类型只是我的一个核心数据实体中的一个属性,在一个列表中我有借出的项目,在另一个列表中我有借出的项目,但它们是同一个实体。

你在那里的东西应该可以正常工作。另一种选择是使用一个具有所有功能的通用UIViewController超类,然后将该基类划分为子类,并提供设置适当类型的viewDidLoad实现。然后在Interface Builder中,可以将UITabBar视图控制器设置为适当的子类型


结果是一样的,但在IB中可能会更清楚,因为你不必依赖于记住每个数字标记的含义

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

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

UITabBarController *tbc = (UITabBarController*)self.window.rootViewController;
tbc.delegate = self;
然后实现以下委托方法:

- (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);

}

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

嗯,解决方案看起来不错!所以我只是简单地把tabBarController:didSelectViewController:放在我的应用程序委托中?我会在明天早上试一试,并随时通知你。谢谢您还需要将应用程序委托设置为选项卡栏控制器的委托,并声明您的应用程序委托符合协议。您是否有时间分享一小段代码,我尝试的内容无效:/我将在几小时后:)。同时,您可以使用您尝试过的代码更新您的问题,其他人可能会提供帮助。这对我来说也是很有用的,看看你到目前为止都有什么。很抱歉评论太晚,首先感谢你的代码。我仍然接受了答案,但是您的代码仍然依赖于tag属性,这是我有点不喜欢的。您还有其他不使用Tag属性的想法吗?