在Storyboard上使用带有tabBarController的委托

时间:2012-04-02 19:39:18

标签: iphone objective-c cocoa

当我尝试并围绕这一点时,我会感激任何建议 - 我不确定我是否实施了这个错误,或者是在错误的前提下工作(或两者兼而有之)。

如果我有一个类,我已经创建了一个协议(delegatOR) - 为了为该协议分配一个委托,我是否正确地说我需要在某个地方分配/初始化'delegatee'类。委托人的实现文件,然后将其指定为委托人的委托?

如果是这样,请跟进问题:我在Storyboard中设置了tabBarController,当用户点击'end'选项卡时,我想向viewController发送一条消息,告知他们即将离开的视图,所以它会弹出一个警告,上面写着“你确定吗?”。由于故事板在幕后进行初始化和分配,因此我不知道如何设置委托。我在另一个关于使用prepareForSegue方法的帖子中读到了两个viewController之间的segue,以设置委托,但是无法为tabBarController设计类似的catch-and-set技术。

1 个答案:

答案 0 :(得分:0)

  

如果我有一个类,我已经创建了一个协议(delegatOR) - 为了为该协议分配一个委托,我是否正确地说我需要在某个地方分配/初始化'delegatee'类。委托人的实现文件,然后将其指定为委托人的委托?

没有。它通常的工作方式是,其他一些类,通常是某种控制器,将实例化(即分配/初始化)一个对象及其委托,并设置该对象的委托。

例如,如果您有UITableViewUITableViewDelegate,通常您拥有某种拥有UITableView的视图控制器,并拥有UITableViewDelegate(通常视图控制器本身就是委托)。视图控制器的工作是设置表视图的委托。 UITableView的工作。

但是,在使用Storyboard时,设置视图控制器的委托可能很难。如果prepareForSegue:方法不适合你,我认为这是因为标签栏控制器是你的根视图控制器(根据HIG,它应该是这样)。由于您的应用委托将具有window属性,您应该能够从中获取根视图控制器:

UITabBarController *tabController = (UITabBarController *)self.window.rootViewController;
tabController.selectedIndex = [defaults integerForKey:kOptionLastTabSelectedKey];
tabController.delegate = self;