ios - 在 Controller A中,通过UIButton打开包含的 Controller B

标签 ios uistoryboard segue

我如何连接 Controller A 内的 UIButton,以便它使用 Storyboard打开包含在 Controller A 内(在“容器 View ”内)的 Controller B?

即 Controller B只占用 Controller A的部分区域。 Controller A 仍然部分可见。

背景: 将 Controller B 添加到另一个 Controller A 内的容器 View 时,它默认在 Controller A 加载后立即打开 Controller B。我希望首先隐藏 Controller B,然后通过点击按钮将其打开。

最佳答案

将 nib/storyboard 启动资源的 View 生命周期分开会有所帮助。

您需要在 Controller B 的 View 创建和加载之后但在显示之前的某个时间隐藏它。然后,为了响应某个操作,您需要取消隐藏 View (或做一些更漂亮的演示)。

通常,您将在 Controller A 中声明一个属性:

@property (weak, nonatomic) IBOutlet ControllerB *controllerB;

您在 Storyboard 中连接的内容。 现在您有了对 controllerB 实例的引用,您可以在 controllerA 的代码中使用它。

由于您已将 controllerB 的 View 嵌套在 Storyboard中 controllerA 的 View 层次结构中,因此只要在 controllerA 上调用 -viewDidLoad,您的 controllerB 实例就会存在并准备好进行操作。

- (void)viewDidLoad
{
    [_controllerB.view setHidden:YES];
    //other setup and configuration of controllerA
}

您可以在 viewWillAppear 或其他几个地方执行此操作,但只要在调用 -viewDidAppear 之前隐藏 controllerB.view,就可以了。

然后你有 controllerA 响应按钮按下这样的东西:

- (IBAction)userPressedTheButton:(id)sender
{
    [_controllerB.view setHidden:NO];
}

关于ios - 在 Controller A中,通过UIButton打开包含的 Controller B,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22034629/

相关文章:

ios - 即使实现委托(delegate)方法也会出现 "does not conform to JTAppleCalendarViewDelegate"错误

ios - 无法使用类型为 'CGBitmapInfo' 的参数列表调用类型为 '(UInt32)' 的初始值设定项

ios - self.tableView.indexPathForCell(cell) 返回错误的单元格?

iOS7 中的 UITableViewCell indexPath 崩溃

ios - 更改 Segue 时选项卡栏消失

ios - Unwind segue (D->B) 不释放 C

iphone - 在 didSelectRowAtIndexPath 中获取用户位置坐标(用于 TableView Cell 点击)

ios - 为什么我打开苹果 map 时出现 "Terminated due to Memory Pressure"?

objective-c - 如何从另一个 View Controller 访问选项卡 View Controller

ios - 使用自动布局和界面生成器垂直展开/间隔屏幕元素