gpt4 book ai didi

iOS:简单的 UIVIew 没有被添加到另一个 UIView

转载 作者:行者123 更新时间:2023-11-29 03:18:22 26 4
gpt4 key购买 nike

我有一个 Storyboard驱动的 iOS 应用程序。我的目标是将一个小方形 View (定义为其他 XIB)添加到主 ViewController 上的另一个 UIView。*//请注意,我已在 Identity Inspector 中正确分配了类名称*

在主ViewController上,我手动添加了一个UIView(myHolderView),并在ViewController界面中添加了一个UIView成员。

//.h
@interface ViewController : UIViewController
@property(nonatomic, strong) IBOutlet UIView *myHolderView;
@end

而且,我已经通过“BlueString”连接了这个 IBOutlet :)

现在,我添加了另一个具有单一 View 的 XIB - 将其命名为 MySquare.xib 并在其上添加了一个标签。并且,添加了一个带有 .h 和 .m 文件的 UIView 类。并且建立了“BlueString”连接。

@interface MySquare : UIView
@property(nonatomic, strong) IBOutlet UILabel *myLabel;
@end

现在,在实现中:

@implementation ViewController
@synthesize myHolderView;
- (void)viewDidLoad
{
[super viewDidLoad];
MySquare *sq=[[MySqure alloc]init];
// Do any additional setup after loading the view, typically from a nib.
[self.myHolderView addSubview:sq];
}

当我在模拟器中运行它时,它只显示主视图,但方形 View 不会出现。我知道主视图已加载,因为...我更改了它的颜色以便我可以看到。请帮忙。

最佳答案

可能您没有在 MySquare.m 文件中使用 xib 进行 View 初始化。

- (id) initWithFrame:(CGRect)frame {
NSLog(@"This is called if you add programatically this view");
self = [super initWithFrame:frame];
if (self) {
[self addSubview:[[[NSBundle mainBundle] loadNibNamed:@"MyIBView" owner:self options:nil] objectAtIndex:0]];
}
return self;
}

如果您计划使用 Interface Builder 添加 xib,则必须类似地实现 initWithCoder 方法:

-(id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
[self addSubview:[[[NSBundle mainBundle] loadNibNamed:@"MyIBView" owner:self options:nil] objectAtIndex:0]];
}
return self;
}

请完成此 list ,它也可能对其他人有帮助:

使用 Interface Builder 布局 (xib) 添加自定义 View 的 list :

1) 新建一个xib(File->New->IOS/User Interface->View),命名(eg. MyIBView)

2) 创建一个新类(File->New->IOS/Cocoa Touch->Objective-C class),确保它是UIView的子类!将其命名为 MyIBView。

现在您的项目中添加了 MyIBView.xib、MyIBView.h 和 MyIBView.m 文件

3) 编辑您的 MyIBView.xib:选择文件的所有者并使用身份检查器(第 3 个图标)选择您最近创建的类 MyIBView。

4) 选择顶层 View (如果它是一个新的 xib,只有这个存在)并确保使用身份检查器该类是 UIView(灰色)并且没有被覆盖

5) 现在您可以将 IBOutlets 和/或 IBAction 添加到您的 MyIBView.h 文件中,并且您可以在 MyIBView.xib 中使用 Interface Builder 进行连接

在另一个 View 中以编程方式使用此 View :

6a) 如果您想以编程方式使用此自定义 View ,请在您的 MyIBView.m 文件中创建上面的第一个方法 (initWithFrame)

7a) 将您的 MyIBView.h 文件包含在您希望以编程方式添加自定义 View 的位置

8a) 现在您可以添加您的 View :

     MyIBView *myIBView = [[MyIBView alloc] initWithFrame:CGRectMake(0,0,100,100)];

在另一个 View 中使用 Interface Builder 中的这个 View :

6b) 如果您想在 Interface Builder 中使用此自定义 View ,请在您的 MyIBView.m 文件中创建上面的第二个方法 (initWithCoder)

7b) 在您的另一个 View 中,将一个 UIView 拖放到您的 View Canvas 上。使用身份检查器调整大小并将类修改为 MyIBView。

请注意,只有在尝试运行代码后,您才能看到设计时的自定义 View 。

希望对您有所帮助,您可以找到您的错误配置!

关于iOS:简单的 UIVIew 没有被添加到另一个 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21417106/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com