UIScrollView:子视图已添加但未显示

时间:2014-03-11 17:01:40

标签: ios uiscrollview subviews

我有一个名为scroller的UIScrollView。它有自定义UIButtons的子视图。我尝试在添加之前和之后打印子视图的数量,如下所示

    NSLog(@"Adding %d b4 %d",buttonno, [[self.scroller subviews] count]);
    [self.scroller addSubview:menuBtn];
    NSLog(@"Adding %d after %d",buttonno, self.scroller.subviews.count);

子视图未显示。但是子视图的数量增加,例如输出的结果就像

  

2014-03-11 17:53:49.863 PC2 [4519:60b]添加1 b4 10

     

2014-03-11 17:53:49.872 PC2 [4519:60b] 11后加1

但是当我尝试使用运行代码的测试按钮打印子视图的数量时

NSLog(@"Buttons subviews: %d",self.scroller.subviews.count);

我可以看到没有添加子视图..我还可以看到,当我在调试器中看到变量时,没有添加子视图。

顺便说一下,我是根据计时器 [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(checkForTiles) userInfo:nil repeats:YES];

添加按钮的

更新::添加子视图的代码

                if (!alreadyExists)
{
    NSLog(@"Adding %d b4 %d",buttonno, [[self.scroller subviews] count]);
    //AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
    pccButtonViewController *menuBtn=nil;
    menuBtn=[pccButtonViewController alloc ];
    menuBtn = [pccButtonViewController buttonWithType:UIButtonTypeCustom];
    menuBtn.no=buttonno;
    menuBtn.slotNo=buttonCount;
    menuBtn.frame = [[slotFrames objectAtIndex:menuBtn.slotNo] CGRectValue];
    [menuBtn setBackgroundImage:[UIImage imageNamed:[[NSString alloc] initWithFormat:@"L%02d_Tile.jpg",buttonno]] forState:UIControlStateNormal];
    [menuBtn addTarget:self action:@selector(miniButtons:) forControlEvents:UIControlEventTouchUpInside];
    menuBtn.no=buttonno;
    menuBtn.alpha=0.0f;
    [self.scroller addSubview:menuBtn];
    NSLog(@"Adding %d after %d",buttonno, self.scroller.subviews.count);
    //NSLog(@"Subview Added %d btn no:%@",buttonno,[slotFrames objectAtIndex:menuBtn.slotNo]);
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0f];
    //self.menuBtn.frame = CGRectMake(8, 10, 50, 60);
    menuBtn.alpha=1.0f;
    [UIView commitAnimations];
    [buttons addObject:menuBtn];
    buttonCount++;
}
buttonclicked=0;
[self.scroller  setContentSize:CGSizeMake([self.scroller  bounds].size.width,(ceil(buttonCount/tilesPerRow)+1)*[self.scroller  bounds].size.width/tilesPerRow/2*3)];
appdelegate.Sharevar.vidsyncButtons=self.scroller.subviews.copy;//Used to maintain State when the view is presented for the second time

当View首次运行时,此功能正常。第二次运行时出现问题..我从appdelegate中移除视图

-(void)removeAnyView
{
NSLog(@"Removing");
if (viewonScreen)
{
    viewonScreen=false;
    [self.inPort prepareToBeDeleted];
    self.inPort=Nil;
    [self.window.rootViewController dismissViewControllerAnimated:NO completion:^{[self     presentView];}];
 }

}

3 个答案:

答案 0 :(得分:1)

已经很久了..我忘记了这个问题..错误是由没有使NSTimer无效引起的..要小心这些......

答案 1 :(得分:0)

对UI的任何更新都必须在主线程上,而你的NSTimer不会,所以你需要做这样的事情......

dispatch_sync(dispatch_get_main_queue(), ^{
    [self.scroller addSubview:menuBtn];
});

答案 2 :(得分:0)

更改此

menuBtn=[pccButtonViewController alloc ];

到这个

menuBtn=[[pccButtonViewController alloc ] init];

来自文件:

  

buttonWithType:

     

此方法是用于创建按钮对象的便捷构造函数   具体配置。如果你是UIButton的子类,那么这个方法   不返回子类的实例。如果你想创建一个   在特定子类的实例中,必须分配/初始化按钮   直接