繁体   English   中英

刷新视图

[英]Refreshing a view

好的,我创建了一个应用程序,在其中一个屏幕中,我有一个呼叫槽屏幕。 基本上有18个按钮,范围从09.00-09.30一直到17.30-16.00,每行分成两个按钮。 顶部还有两个箭头,允许用户前进最多7天并返回到当前日期。

当用户单击其中一个按钮时,它将弹出并显示警告,指出选择的时间。

现在我想要的是,当用户访问该视图时,任何不可更改的时隙都将具有不同的图像。

我已经创建了这样的按钮

    for(int i = 0; i <[imageList count]; i++){
    UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(xPos, yPos, 145, 55)];
    csBut = [[UIButton alloc]init];
    csBut = [UIButton buttonWithType:UIButtonTypeCustom];
    csBut.frame = CGRectMake(0, 0, 145, 55);
    [csBut addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
    [csBut setImage:[imageList objectAtIndex:i] forState:UIControlStateNormal];
    csBut.tag = (100 + i);
    [myView addSubview:csBut];
    [SV  addSubview:myView];

    if(i % 2 == 0){
        xPos += 160;    
    }else{
        yPos+=60; 
        xPos = 5;
    }

} 

[self emptySlots];

}

现在,在底部声明的empty slot方法是一种扫描每个时隙并检查小时是否小于当前小时的方法。 如果是,则将图像更改为淡出的按钮图像。 代码是

-(void)emptySlots{

int tmpValue = 100;
int myInteger = 1;
int tmpHour = 9;
int tmpMinute = 0;

for(int i = 0 ; i <18; i++){
    UIButton *validSlot = (UIButton*)[self.view viewWithTag:tmpValue];

    if(i % 2 == 0){

        tmpMinute = (arc4random() % 30);
    }else{

        tmpMinute = (arc4random() % 30) + 30;
        tmpHour+=1;

    }

    [self checkValidSlot:tmpHour :tmpMinute];

    if(tslot){
        NSString* myNewString = [NSString stringWithFormat:@"tb%i.png", myInteger];    
        [validSlot setImage:[UIImage imageNamed:myNewString] forState:UIControlStateSelected];
        [validSlot setSelected:YES]; 
    }else{
        NSString* myNewString = [NSString stringWithFormat:@"fb%i.png", myInteger];    
        [validSlot setImage:[UIImage imageNamed:myNewString] forState:UIControlStateSelected];
        [validSlot setSelected:YES]; 
    }

    tmpValue+=1;
    myInteger+=1;
}

}

空插槽代码尚不完善,尚需解决,但不是我遇到的问题。

我遇到的问题是,当用户单击右箭头转到第二天时,它将运行名为fillslots的代码,该代码会在第二天可用的时间段内使用普通按钮自动重新填充插槽。 问题是它不会立即刷新。 与用户单击后退箭头以返回到当前日期并运行空槽方法一样,我必须再次单击箭头才能刷新。

我如何做到这一点,当用户单击箭头时,它会自动刷新视图,因此我不必再次单击箭头,因为它颇为令人沮丧,我也无法弄清楚:@

在此先感谢您的帮助。 希望我足够清楚

尝试UIViewsetNeedsDisplay 有关更多参考,请访问Apple文档。

就像[SV setNeedsDisplay]; 在按钮中单击操作方法的最后一行。

我设法弄清楚了。 我用线程来更新callslots,它工作得很完美:D

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM