首先确定是继承还是包含关系,最好是包含,然后你的View继承自UIView,把内部实现的接口都放在.m文件里,外面实在要用的才放在外面,暴露的接口不要放多,感觉几句话说不完。。

解决方案 »

  1.   

    感觉,你能写个封装UIScrollView 的demo吗?没懂~
      

  2.   

    http://www.raywenderlich.com/1768/uiview-tutorial-for-ios-how-to-make-a-custom-uiview-in-ios-5-a-5-star-rating-view
      

  3.   

    如果在多个页面有相同的代码或逻辑这时你就可以考虑分离公共代码对它们进行封装。你这里的uiscrollview 要看你的需求,如果是只针对uiscrollview的某些公共部分的封装,你可以直接继承uiscrollview进行扩展。如果是uiscrollivew只是作为控件封装的一部分存在,而且还有一些与uiscrollview无关的逻辑,这时你就需要继承更顶层的uiview来实现你的自定义控件。
      

  4.   

    之前一直没有封装过ui控件,能不能写一个demo啊。需求是一个uiscrollview+uipagecontrol
      

  5.   

    之前一直没有封装过ui控件,能不能写一个demo啊。需求是一个uiscrollview+uipagecontrol只能说是给你思路。你这个是要集成 uiscrollview+uipagecontrol 这样的话,你的自定义控件就需要继承UIView,也就是以上面说的第二种情况来处理。你可以到这个地方找找www.code4app.com
      

  6.   


    贴上代码:
    #import <UIKit/UIKit.h>
    @interface MyScrollview : UIView <
    UIScrollViewDelegate,
    UIScrollViewDelegate>
    +(MyScrollview *)shareManager;
    @property(nonatomic,strong) UIPageControl *newsPageControl;
    -(void)setup:(NSArray *)picArray;
    @end#import "MyScrollview.h"
    @implementation MyScrollview
    @synthesize newsPageControl;
    - (id)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            self.frame = CGRectMake(0.0, 64.0, 320.0, 175.0);
        }
        return self;
    }
    +(MyScrollview *)shareManager{
        static MyScrollview *scroll = nil;
        static dispatch_once_t onceTake;
        dispatch_once(&onceTake, ^{
            scroll = [[self alloc]init];
        });
        return scroll;
    }
    -(void)setup:(NSArray *)picArray{
        UIScrollView *newScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0.0, 64.0, 320.0, 175.0)];
        newScrollView.delegate = self;
        newScrollView.pagingEnabled = YES;
        for (int i = 0; i < picArray.count; i ++) {
            UIImageView *img = [[UIImageView alloc]initWithFrame:CGRectMake(i * 320.0, 0.0, 320.0, 175.0)];
            img.image = [UIImage imageNamed:picArray[i]];
            [newScrollView addSubview:img];
        }
            newsPageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(261, 210, 39, 37)];
            newsPageControl.tintColor = [UIColor blackColor];
            newsPageControl.currentPageIndicatorTintColor = [UIColor blueColor];
            newsPageControl.currentPage = 0;
            newsPageControl.numberOfPages = 3;
            [self addSubview:newsPageControl];
    }
    @end
    给个建议呗
      

  7.   

    初始化工具在init方法里做,调整frame的代码放在layoutSubviews里
      

  8.   

    - (id)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
       
        }
        return self;
    }这里面设置控件,
    layoutSubviews设置frame?
      

  9.   

    首先不明白使用“单例”的目的。再者,picArray 可设置为属性,在使用控件的外部来赋值
    在init方法中可初始化uiscrollview及uipagecontrol 并添加到当前控件中。在layoutsubview中根据picArray来修改uiscrollview的contentsize.可公开一个初始化法,我们更希望于这样这初始化一个控件
    MyScrollview  *mv =[[MyScrollview alloc] initWithPictures:XXX] ;
    [self.view addSubview:mv];
     
      

  10.   

    大体的已经弄好了,不过picArray在外部调用控件的时候怎么赋值呢??
    #import <UIKit/UIKit.h>
    @interface MyScrollview : UIView <
                              UIScrollViewDelegate
                              >
    @property(nonatomic,strong) UIPageControl *newsPageControl;
    @property(nonatomic,strong) NSArray *picArray;
    -(void)setup;
    @end#import "MyScrollview.h"
    @implementation MyScrollview
    @synthesize newsPageControl;
    @synthesize picArray;
    - (id)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            self.frame = CGRectMake(0.0, 0.0, 320.0, 175.0);
            [self setup];
         }
        return self;
    }
    -(void)setup{
        UIScrollView *newScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0.0, 64.0, 320.0, 175.0)];
        newScrollView.contentSize = CGSizeMake(320 * 3, 175);
        newScrollView.showsVerticalScrollIndicator = NO;
        newScrollView.delegate = self;
        newScrollView.pagingEnabled = YES;
        picArray = @[@"Phone29.png",@"Phone30.png",@"Phone31.png"];
        for (int i = 0; i < picArray.count; i ++) {
            UIImageView *img = [[UIImageView alloc]initWithFrame:CGRectMake(i * 320.0, 0.0, 320.0, 175.0)];
            img.image = [UIImage imageNamed:picArray[i]];
            [newScrollView addSubview:img];
        }
        [self addSubview:newScrollView];
        newsPageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(261, 210, 39, 37)];
        newsPageControl.tintColor = [UIColor blackColor];
        newsPageControl.currentPageIndicatorTintColor = [UIColor blueColor];
        newsPageControl.currentPage = 0;
        newsPageControl.numberOfPages = 3;
        [self addSubview:newsPageControl]; 
    }
    -(void)scrollViewDidScroll:(UIScrollView*)scrollView{
        [newsPageControl setCurrentPage:fabs(scrollView.contentOffset.x/self.frame.size.width)];
    }
    @end
      

  11.   

    直接调你MyScrollview的实例变量picArray赋值就行了,你这个picArray用copy,你内部肯定不会用动态变的array
      

  12.   

     MyScrollview * mycrollview = [[MyScrollview alloc]init];
        mycrollview.picArray = @[@"Phone29.png",@"Phone30.png",@"Phone31.png"];
        [self.view addSubview:mycrollview];
    可是这样,运行起来是白板 啊
      

  13.   

    看MyScrollview实例初始化成功了没有,打印一下,看frame正不正确,在遍历picArray的时候,把image打印出来,看image取到了没有
      

  14.   


    ,实例化成功了的,我在初始化的时候吧图片扔进去就能显示出来,但是在外面调用就是不行,遍历picArray的时候image可以打印出来
      

  15.   

    你这个setup方法是在init里调用的,你在设置picArray后没有调setup