objective-c - 如何使用 Storyboard设置代表

标签 objective-c ios storyboard

我一直在争论这个问题,希望你能帮助我。

我一直在使用 Storyboard创建一个应用程序,我有一个要点,我弹出一个模式框来添加一个新记录,弹出窗口工作正常,问题是关闭它。

我已经按照 Apple 关于如何使用委托(delegate)正确关闭模态框的说明进行操作,并且效果很好,除了我需要将导航 Controller 添加到我的模态框,因为添加过程需要两个步骤(此处为 fullscreen ) :

enter image description here

问题出在委托(delegate)的设置上,所以这是我的两个问题:

1- 在我的 Root View 类(我的选项卡)中是 Add 类(模式)的委托(delegate),除此之外一切都设置正确:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"showAdd"]) {
        [[segue destinationViewController] setDelegate:self];

    }
}

问题在于 [segue destinationViewController] 返回的是 navigationcontroller 而不是 AddDrinkViewController 类(参见 Storyboard)。我该如何解决这个问题?如果我完全删除导航 Controller ,代码可以正常设置适当的委托(delegate)。

2- 有没有办法通过在 Storyboard中拖动 socket 来设置代表?

谢谢!

最佳答案

你是对的,在这种情况下,destinationViewController 将是一个 UINavigationController。我写了一个类别来处理这种常见情况:

// category .h file
@interface UIStoryboardSegue (NavControllerExtensions)
// Gets destinationViewCotroller. But if that controller 
// is a NavigationController, returns the nav controller's 
// top level view controller instead.
@property (readonly) id topLevelDestinationViewController;
@end

// category .m file
@implementation UIStoryboardSegue (NavControllerExtensions)
- (id)topLevelDestinationViewController
{
  id dest = self.destinationViewController;
  if ([dest isKindOfClass:[UINavigationController class]]) {
    UINavigationController* nav = dest;
    dest = nav.topViewController;
  }
  return dest;
}
@end

所以现在您可以在您的任何 prepareForSegue 方法中执行此操作,而无需担心是否存在 NavigationController:

[[segue topLevelDestinationViewController] setDelegate:self]
// another example:
MyViewController *vc = segue.topLevelDestinationViewController;
vc.delegate = self; // etc.

要回答你的第二个问题,我找不到在 IB 中设置委托(delegate)的方法。

关于objective-c - 如何使用 Storyboard设置代表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8041237/

相关文章:

ios - numberOfSections 被调用? iOS

ios - 如何动画删除标签?

ios - 使用 storyboardID 检测首次启动

iphone - 如何从sqlite数据库同步值并保存到iPhone中的网络服务器

objective-c - 四舍五入 NSDecimalNumber

iOS iMessage 应用扩展 - 复制 iMessage 贴纸应用行为

ios - Storyboard无法加载

iOS Storyboard为什么有些元素没有出现在模拟器中?

ios - 从另一个类(另一个 ViewController)编辑 UILabel

ios - Realm token 有什么用?