添加viewcontroller视图作为视图的子视图

时间:2014-01-30 05:23:13

标签: ios

我有一个方法,它将视图控制器的视图作为子视图加载到scrollview。我试图添加为子视图的视图控制器视图中包含一个tableview。

    -(void)addSubViewToScrollView{

        CGFloat x = 0;
        UIScrollView *scrollview = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0,
        self.view.frame.size.width, self.view.frame.size.height)];
        NSInteger viewcount= 8;

            for(int i = 0; i< viewcount; i++) {
               self.opt = [[EliteQuestionScreen alloc]  
                initWithNibName:@"EliteQuestionScreen"
                bundle:[NSBundle mainBundle]];
                if (i == 0) {
                x = self.opt.view.frame.origin.x;
            } else {
                x = self.opt.view..frame.size.width + x;
            }


            UIView *viewMine = self.opt.view;
            viewMine.frame = CGRectMake(x, 0, self.opt.view.frame.size.width,
            self.opt.view.frame.size.height);
            [scrollview setPagingEnabled:YES];
            [scrollview addSubview:viewMine];

        }
        scrollview.contentSize = CGSizeMake(self.view.frame.size.width *viewcount, 
        self.view.frame.size.height);
        [self.view addSubview:scrollview];
    }

我已经像这样重新审视EliteQuestionScreen的对象引用

@property(strong,nonatomic)EliteQuestionScreen *opt;

但是当此代码导致我的应用程序崩溃并且出现错误时

[EliteQuestionScreen tableView:numberOfRowsInSection:]: message sent to deallocated instance 0x716d6a0;

我无法理解这种行为?

但是当我刚刚关闭循环并将viewcontroller的视图作为子视图添加到scrollview时它运行良好

-(void)addSubViewToScrollView{

        CGFloat x = 0;
        UIScrollView *scrollview = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0,
        self.view.frame.size.width, self.view.frame.size.height)];
        NSInteger viewcount= 8;


               self.opt = [[EliteQuestionScreen alloc]  
                initWithNibName:@"EliteQuestionScreen"
                bundle:[NSBundle mainBundle]];

                x = self.opt.view.frame.origin.x;

               UIView *viewMine = self.opt.view;
               viewMine.frame = CGRectMake(x, 0, self.opt.view.frame.size.width,
               self.opt.view.frame.size.height);
               [scrollview setPagingEnabled:YES];
               [scrollview addSubview:viewMine];


        scrollview.contentSize = CGSizeMake(self.view.frame.size.width *viewcount, 
        self.view.frame.size.height);
        [self.view addSubview:scrollview];
       }

为什么会发生这种情况我无法理解?

3 个答案:

答案 0 :(得分:0)

问题是控制器对象是本地的,并且如果在.h文件中声明控制器对象,则会被取消分配

答案 1 :(得分:0)

试试这个,

for(int i = 0; i< viewcount; i++) {

    EliteQuestionScreen *optScreen = [[EliteQuestionScreen alloc] initWithNibName:@"EliteQuestionScreen"  bundle:[NSBundle mainBundle]];
    if (i == 0) {
         x = optScreen.view.frame.origin.x;
    } else {
         x = optScreen.view..frame.size.width + x;
    }
    //create and set a property in EliteQuestionScreen to identify different EliteQuestionScreen's (if needed)
    UIView *viewMine = optScreen.view;
    viewMine.frame = CGRectMake(x, 0, optScreen.view.frame.size.width,
    optScreen.view.frame.size.height);
    [scrollview setPagingEnabled:YES];
    [scrollview addSubview:viewMine];

}

答案 2 :(得分:0)

按以下步骤更新-(void)addSubViewToScrollView方法

    -(void)addSubViewToScrollView {
        NSInteger viewcount= 8;
        // Code for adding subview inside scrollview
        self.opt = [[EliteQuestionScreen alloc] initWithNibName:@"EliteQuestionScreen" bundle:[NSBundle mainBundle]];
        [self addChildViewController: self.opt];
        [scrollview addSubview:self.opt.view];
        [self.opt didMoveToParentViewController: self];

        scrollview.contentSize = CGSizeMake(self.view.frame.size.width *viewcount, 
        self.view.frame.size.height);
        [self.view addSubview:scrollview];

    }