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

时间:2015-09-19 07:57:48

标签: objective-c dynamic uiview storyboard xib

这可能是奇怪的问题。我知道如何使用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;

需要更改虚拟视图y位置(如复制过去或重复相同视图)。是否可以在代码中执行此操作,如上面的代码(for loop)

int y=0;
for(int i = 0: i < 10: i++)
{
// need to change dummyview y position
y+=10;
}

这里10是可变的。

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

也可以使用scrollview但我不想浪费内存,因为这个tableviewcell喜欢显示更多选项(记得uilable显示更多或更少的选项)。如果你想看到更多的uiview而不是它只会重复那个视图,否则它只是一个uiview。

更新 我想以编程方式复制过去的uiview。来自xib或storyboard的UIView(selfview的子视图)。 我正在使用autolayout。 这个uiView有多个uibutton和uilabel如何识别特定视图和uibutton等。

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

2 个答案:

答案 0 :(得分:0)

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

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];

答案 1 :(得分:0)

我不确定您是否可以在故​​事板中重复使用这样的视图。 实现您想要做的事情的正确方法是使用xib创建一个新的UIView子类。 在IB中进行设计。添加所需的所有子视图并附加IBOutlets。 在那里你有一个可重复使用的视图。