Iphone UITabBar-使用故事板的同一类的两个视图(nib)
我正在使用iOS5和故事板。我的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";
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属性的想法吗?