【问题标题】:add xib UIView to storyboard view controller without using code在不使用代码的情况下将 xib UIView 添加到情节提要视图控制器
【发布时间】:2023-04-03 06:30:01
【问题描述】:

我正在尝试重用特定视图。假设这是一个有五个按钮的投票系统。由于它出现在不同的场景/屏幕中,我只想拥有一个视图并在需要时重用它。所以我在一个名为MyStarSystem.xib 的xib 文件中创建了视图。现在我想简单地将我的视图放到故事板视图控制器中通过故事板,而不是在代码中。

如果一切顺利,我知道我应该能够做到这一点,只需将 UIView 拖到视图控制器中,然后将类设置为 UIVotingView。但是我在哪里告诉UIVotingView 来绘制xib 的内容呢?当然,按钮必须是交互式的,所以我想要 IBOutlets 和 IBActions。所以我正在考虑使用-(void)drawRect:(CGRec)rect,但这没有任何意义作为解决方案。有谁知道我如何创建这个视图并在整个过程中使用它——将它放入情节提要中?

【问题讨论】:

  • 您可以将 xib 中的视图复制并粘贴到情节提要中。删除视图控制器附带的视图,并从 xib 中粘贴。
  • @rdelmar 谢谢。让我试试,特别是看看它是否带有所有的 IBOutlets 和 IBActions。
  • @rdelmar 当我直接从 xib 拖放时,IBActions 和 IBOutlets 不会出现。我希望有一种面向对象的方式来利用整个系统来创建复合对象。显示器本身不是问题。真正的问题是,如果这种组合在 iOS 中是不可能的,我将有重复的代码。
  • @KatedralPillon 我相信你和我正在寻找相同的答案来解决我们如何将自定义视图 (xib) 拖放到情节提要中的控制器中并像其他 UIView 对象一样使用它,但是许多响应是关于以编程方式加载 xib 并以编程方式将自定义视图添加到父视图。我认为我还没有找到解决方案。我想知道。
  • 你尝试过容器视图吗?

标签: ios xcode uiview storyboard xib


【解决方案1】:

要重用从一个控制器到另一个控制器的所有信息,您有很多方法,但从来没有编码是不可能的,从 Storyboard 调用 xib,但很简单让我解释一下:

1) 要重用您的信息类,请按照以下步骤操作:

- 为 your.xib 打开你的 class.h 并在第一行使用:

    #import <UIKit/UIKit.h>
    //here you have to import your voting view so:
    #import "VotingView.h"

    @interface ViewController : UIViewController {

}

@end

- 现在您必须将所有功能从您的投票视图导入您的 xib 视图才能重用它们:

    #import <UIKit/UIKit.h>
    #import "VotingView.h"

    //change you UIViewController in to your VotingView like this 

    @interface ViewController : VotingView {

    }

@end
  • 好的,现在您可以从VotingView 调用ViewController.m 中的所有函数,例如,如果在您的VotingView 中有一个- (void)voting {} 现在在您的ViewController.m 中的ViewDidLoad 下,您只写了[self voting];

现在知道如何从 Storyboard 调用 XIB:

进入 Storyboard 中的 ViewController 并在 Interface 中添加一个 Button,使用 IBAction 调用 xib:

- (IBAction)callXib:(id)sender{

ViewController *viewController=[[ViewController alloc]initWithNibName:@"MyStarSystem" bundle:nil];

[self presentViewController:viewController animated:YES completion:nil]; 

}

现在要解除从 xib 到情节提要的返回,创建其他 Button 并使用此功能:

- (IBAction)backTo:(id)sender{

[self dismissViewControllerAnimated:YES completion:nil];

}

就是这样,希望对您有所帮助!

【讨论】:

    【解决方案2】:

    我认为您可以通过在情节提要中制作基本视图控制器并连接其 IBAction 和插座来完成您想要的操作。然后,您可以将此控制器复制并粘贴到情节提要中——根据您的操作方式,副本可能会直接出现在旧控制器的上方,因此您需要将其移到上面才能看到两者。根据需要创建任意数量的这些,并为它们创建新的子类,这些子类都继承自基本视图控制器。他们都应该可以访问您在基本控制器中所做的插座和操作(插座需要在 .h 文件中,而不是 .m 中的类扩展名)。然后,您可以在子类中添加任何特定代码,并在情节提要中添加任何额外的视图来自定义它们。

    【讨论】:

    • 感谢您的建议。 +1。但我似乎无法让它发挥作用。所以我现在只使用重复的代码。
    猜你喜欢
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    相关资源
    最近更新 更多