【问题标题】:Using delegate with tabBarController on Storyboard在 Storyboard 上将委托与 tabBarController 一起使用
【发布时间】:2012-04-02 19:39:17
【问题描述】:

如果我尝试解决这个问题,我会很感激任何建议 - 我不确定我是在实施这个错误,还是在错误的前提下工作(或两者兼而有之)。

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

如果是这样,请跟进问题:我在 Storyboard 中设置了一个 tabBarController,当用户单击“结束”选项卡时,我想向 viewController 发送一条消息以获取他们即将离开的视图,所以它会弹出一个警报,说“你确定吗?”。由于情节提要在幕后进行初始化和分配,因此我不知道如何设置委托。我在另一篇文章中读到了关于在两个 viewController 之间切换以设置委托时使用 prepareForSegue 方法,但无法为 tabBarController 制定类似的捕获和设置技术。

【问题讨论】:

    标签: iphone objective-c cocoa


    【解决方案1】:

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

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

    例如,如果你有一个UITableView 和一个UITableViewDelegate,通常你有某种视图控制器拥有UITableView,也拥有UITableViewDelegate(通常视图控制器本身就是委托)。设置表视图的委托是视图控制器的工作。毫无疑问,UITableView 的工作不是创建和设置其委托。

    不过,您是对的,当您使用 Storyboard 时,为视图控制器设置委托可能很困难。如果prepareForSegue: 方法对您不起作用,我认为这是因为标签栏控制器是您的根视图控制器(根据 HIG,它应该是)。由于您的应用委托将具有 window 属性,因此您应该能够从中访问根视图控制器:

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

    【讨论】:

    • 是的 - 抱歉,我正在考虑我一直在研究的最后一个示例,这些示例涉及创建协议,而不是使用自定义可可代表。我绊倒的是必须在实例化时完成委托,现在回想起来这很明显 - 是的,在使用情节提要时变得很棘手。在后 Storyboard 世界中尝试学习这一点的另一件棘手的事情 - 基于 Storyboard 的开发人员似乎几乎没有涉及到应用程序委托 - 需要在给出建议之前进行学习。谢谢你的回复。
    猜你喜欢
    • 1970-01-01
    • 2012-02-03
    • 2012-10-29
    • 2010-10-09
    • 2017-04-16
    • 2011-03-23
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    相关资源
    最近更新 更多