2012-01-05 163 views
0

好的我创建了一个应用程序,其中一个屏幕中有一个呼叫槽屏幕。基本上有18个按钮,从09.00-09.30到17.30-16.00不等,每行分成两个按钮。顶部还有两个箭头,允许用户前进七天并返回当天。刷新视图

当用户点击其中一个按钮时,会弹出一个提示所选时间的提示。

现在我想要的是,当用户访问这个视图时,任何不可改变的时隙具有不同的图像。

我已创建的按钮这样

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]; 

} 

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

-(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,它会自动用正常按钮重新填充插槽,第二天时隙将可用。问题是它不会立即刷新。与用户点击后退箭头返回当前日期并运行空插槽方法时相同,我必须在刷新之前再次单击箭头。

我如何使它所以当用户点击箭头,它会自动刷新视图,这样我就不必再次单击箭头其相当令人沮丧,我无法弄清楚:@

提前感谢您的帮助。希望我足够清楚

回答

0

我设法弄清楚了。我使用线程来更新的calllots和它完美的工作:D

0

试试setNeedsDisplayUIView。欲了解更多参考,请访问Apple documentation

这将是像按钮点击操作方法最后一行[SV setNeedsDisplay];

+0

我试过[SV setNeedsDisplay];然后尝试[self.view setNeedsDisplay];但似乎没有工作。将继续与它混乱,看看是否可以完成一些事情,大坝烦人一件小事让你回来 – AdamM 2012-01-05 13:46:43