复制UIView

时间:2012-12-04 08:46:59

标签: objective-c ios cocoa-touch

我无法弄清楚如何将UIView与其内容复制。或者甚至可能吗?

我在.xib文件中使用标签和按钮制作了UIView。现在我希望仅使用不同的标签文本复制此视图n次。

我正在尝试这样做,但这样我只能显示最后一个对象。 _view1 IBOutlet就像_view1Label一样 NSMutableArray *Info = [[NSMutableArray alloc]initWithCapacity:number.intValue]; for(int i = 0; i != number.intValue; i++) { NSString *number = [NSString stringWithFormat:@"Zona%i ",[[NSUserDefaults standardUserDefaults] stringForKey:@"ObjectNumber"].intValue]; NSString *zona = [NSString stringWithFormat:@"%@%i",number, i+1]; NSString *parinkta = [[NSUserDefaults standardUserDefaults] stringForKey:zona]; _view1Label.text = parinkta; _view1.hidden = false; CGRect newrect = CGRectMake(_view1.frame.origin.x, _view1.frame.origin.y + (80 * i), _view1.frame.size.width, _view1.frame.size.height); _view1.frame = newrect; [Info addObject:_view1]; } for(int i = 0; i != number.intValue; i++) { UIView *add = [Info objectAtIndex:i]; [self.view addSubview:add]; }

{{1}}

我想你会明白我想要做的事情,也许我这样做的想法完全是错误的,所以有人能帮助我走上这条路吗?

3 个答案:

答案 0 :(得分:1)

从笔尖多次加载视图,调整加载的每个副本上的标签内容。与尝试复制内存中的UIView内容相比,这更容易,更短,更不容易出错。

以下是使用UINib访问nib内容的示例:

 UINib *nib = [UINib nibWithNibName:@"nibName" bundle:nil];
 NSArray *nibContents = [nib instantiateWithOwner:nil options:nil];

 // Now nibContents contains the top level items from the nib.
 // So a solitary top level UIView will be accessible
 // as [nibContents objectAtIndex:0]

 UIView *view = (UIView *)[nibContents objectAtIndex:0];

 // assumes you've set the tag of your label to '1' in interface builder
 UILabel *label = (UILabel *)[view viewWithTag:1];
 label.text = @"My new text";

所以只需为你想要的每个nib实例重复上面的代码。

答案 1 :(得分:0)

如果您希望显示n次观看,则必须创建视图n次,在第一个for循环中,您无法在多个位置放置单个视图

答案 2 :(得分:0)

如果您通过代码创建了第一个视图,那么您可以使用以下方法。

更改你的for循环,如:

for(int i = 0; i != number.intValue; i++)
    {
        NSString *number = [NSString stringWithFormat:@"Zona%i ",[[NSUserDefaults standardUserDefaults] stringForKey:@"ObjectNumber"].intValue];
        NSString *zona = [NSString stringWithFormat:@"%@%i",number, i+1];
        NSString *parinkta = [[NSUserDefaults standardUserDefaults] stringForKey:zona];
        UIView *tempView = [[UIView alloc] init];
        UILabel *tempLabel = [[UILabel alloc] init];
        tempLabel.frame = _view1Label.frame;
        tempLabel.text = _view1Label.text;
        [tempView addSubview: tempLabel];
        tempView.frame = _view1.frame;
        _view1Label.text = parinkta;
        _view1.hidden = false;
        CGRect newrect = CGRectMake(_view1.frame.origin.x, _view1.frame.origin.y + (80 * i), _view1.frame.size.width, _view1.frame.size.height);
        _view1.frame = newrect;
        [Info addObject:tempView];
    }