如何在故事板或XIB中以编程方式分配uiview?

Posted

技术标签:

【中文标题】如何在故事板或XIB中以编程方式分配uiview?【英文标题】:How to allocate a uiview programmatically that uiview in story board or XIB? 【发布时间】:2015-09-19 07:57:48 【问题描述】:

这可能是个奇怪的问题。我知道如何使用 for 循环重复 uiview

int x=0;
int y=0;
for(int i = 0: i < 10: i++)

uiview *name = [[uiview alloc] initwithframe:(x,y,10,10);
[self.view addsubview:name];
y+=10; x+=10;

但是在这里,我需要的是在 stroyboard 或 xib 中分配的 uiview 并且它具有类似的连接

IBOutlet UIView *dummyView;

需要更改 dummyview y 位置(如复制过去或重复相同的视图)。是否可以在上面的代码(for循环)这样的代码中做到这一点

int y=0;
for(int i = 0: i < 10: i++)

// need to change dummyview y position
y+=10;

这里 10 是可变的。

注意: 这里的 uitableview 可能动态 dummyview 是 tablecell 的子视图,我不想在 tablecell 中使用 tableview。

也可以使用滚动视图,但我不想浪费内存,因为这个 tableviewcell 喜欢显示更多选项(请记住 uilable 显示更多或更少选项)。如果您想查看更多的 uiview,它会重复该视图,否则只有一个 uiview。

更新: 我想以编程方式复制过去的uiview。来自 xib 或故事板的 UIView(self.view 的子视图)。 我正在使用自动布局。 这个 uiView 有多个 uibutton 和 uilabel 我如何识别那个特定的视图和 uibutton 等,

希望可以理解 :) .. 如果没有添加评论。

【问题讨论】:

我不太明白。您是否只想多次加载 XIB 以添加子视图? @Wain 是的。 xib 有一个 uiview 我想加载多次。 【参考方案1】:

不确定你的意思,但如果你想复制多个视图,你可以试试这个

int y=0;
for(int i = 0: i < 10: i++)

    UIView *copyOfView = (UIView*)[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:_dummyView]];
    CGRect frame = copyOfView.frame;
    frame.origin.y = i*10;
    copyOfView.frame = frame;
    [self.view addSubView:copyOfView];

如果你从 .xib 文件加载 UIView,你应该替换:

UIView *copyOfView = [[[NSBundle mainBundle] loadNibNamed:@"YourCustomView" owner:self options:nil] objectAtIndex:0];

【讨论】:

是的,你是对的,我想多次复制 uivew,而不是从代码中复制 uiview。我正在使用自动布局,所以它不起作用。 :( 但它创建了多个宽度为 0 的视图......并且 y 不会改变...... 如果你想改变你设置自动布局的UIview框架,你可以使用self.view.translatesAutoresizingMaskIntoConstraints = YES。但这将打破其他约束。所以你应该通过代码添加自动布局(约束)这个链接将帮助link 感谢您的支持,但我已经厌倦了它对我不起作用的链接。在 for 循环中 Y 位置更改会影响其他 uiview 约束。所以只有我问这个问题。【参考方案2】:

我不确定您是否能够重复使用情节提要中的类似视图。 实现您想要做的正确方法是使用 xib 创建一个新的 UIView 子类。 在 IB 中设计它。添加您想要的所有子视图并附加 IBOutlets。 在那里你有一个可重用的视图。

【讨论】:

以上是关于如何在故事板或XIB中以编程方式分配uiview?的主要内容,如果未能解决你的问题,请参考以下文章

如何让 UIView 在 iOS 中“包装内容”?

如何在 Objective-C 控制器中以编程方式加载用 swift 编写的自定义 XIB 视图

无法在 xCode 6 或更高版本中打开故事板或 xib 文件

在故事板或 xib 中嵌入 cocos3d

没有使用 Swift 的故事板或 xib 文件的 OSX 应用程序

没有使用 Swift 的故事板或 xib 文件的 OSX 应用程序