UIScrollView addSubView:如何防止重新添加相同的 UILabel 实例?

Posted

技术标签:

【中文标题】UIScrollView addSubView:如何防止重新添加相同的 UILabel 实例?【英文标题】:UIScrollView addSubView: How do you prevent re-adding the same UILabel instance? 【发布时间】:2011-06-25 17:33:58 【问题描述】:

所以显然我一遍又一遍地添加相同的标签。我有一个在 IB 中连接的 UILabel 的 IBOutlet。我这样做是因为那是我希望它用于 UIScrollView 的位置。我还想在 ScrollView 的每个页面上添加一个新标签,但我不知道该怎么做。

关于如何完成此任务的任何建议?因为我迷路了:-/

AnotherMadeUpViewController.h

#import <UIKit/UIKit.h>

@interface AnotherMadeUpViewController : UIViewController<UIScrollViewDelegate>


    IBOutlet UIPageControl *pageControl;
    IBOutlet UIScrollView *scroller;
    IBOutlet UILabel *label;


@property (nonatomic,retain)IBOutlet UIPageControl *pageControl;
@property (nonatomic,retain)IBOutlet UIScrollView *scroller;
@property (nonatomic,retain)IBOutlet UILabel *label;


-(IBAction)clickPageControl:(id)sender;

@end

AnotherMadeUpViewController.m

- (void)viewDidLoad

    [super viewDidLoad];
    scroller.delegate=self;
    scroller.pagingEnabled=YES;
    scroller.directionalLockEnabled=YES;
    scroller.showsHorizontalScrollIndicator=NO;
    scroller.showsVerticalScrollIndicator=NO;
    scroller.contentSize=CGSizeMake(pageControl.numberOfPages*scroller.frame.size.width, scroller.frame.size.height);
    CGFloat labelOriginX = label.frame.origin.x;
    CGFloat labelOriginY = label.frame.origin.y;
    CGFloat scrollWidth = 0;
    int pageNumber = 0;
    for (int i=0; i<3; i++)
    
        CGRect rect = label.frame;
        rect.size.height = label.frame.size.height;
        rect.size.width = label.frame.size.width;
        rect.origin.x = labelOriginX + scrollWidth;
        rect.origin.y = labelOriginY;
        label.frame = rect;
        label.text = [NSString stringWithFormat:@"%d", pageNumber];
        label.textColor = [UIColor redColor];
        [scroller addSubview:label];
        pageNumber++;
        scrollWidth += scroller.frame.size.width;
    
    pageControl.numberOfPages=3;
    pageControl.currentPage=0;
    [self.view addSubview:scroller];

【问题讨论】:

【参考方案1】:

您一遍又一遍地重新添加相同的 UILabel 实例,除了在滚动视图的 contentView 中更改标签的位置(框架)之外,什么也没有发生。您必须将该标签的 8 个副本添加到 scrollView,每个副本位于不同的框架中。如果你想在 scrollView 的背景中平铺图像,请尝试将其 backgroundColor 设置为使用 +[UIColor colorWithPatternImage: ] 创建的图案图像

【讨论】:

感谢西斯堡。我希望那没有发生。如果您通过 Interface Builder 使用 outlets,您可以创建新标签吗?因为我不能分配初始化标签,可以吗? 通常当您动态创建视图时,您应该以编程方式进行。无论如何,您也可以在 IB 中创建所有 8 个标签,将每个标签链接到 IBOutlet 引用并单独设置每个标签框架。 好的,我继续做了 :-) 再次感谢西斯堡

以上是关于UIScrollView addSubView:如何防止重新添加相同的 UILabel 实例?的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView addSubview 已经在滚动视图中的视图

在 UIScrollView 中看不到按钮

当前uiview的addSubView

addSubview 更改 scroll.subviews 中一个对象的索引

addSubview 在 iOS 3.1.3 上不显示视图

UIScrollView 项目没有从后台移动