好的,我已经创建了一个应用程序,在其中一个屏幕中我有一个呼叫槽屏幕。基本上有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 :(得分:0)
尝试setNeedsDisplay
的{{1}}。如需更多参考,请访问Apple documentation
在最后一行的按钮点击操作方法中,它会类似于UIView
。
答案 1 :(得分:0)
我设法搞清楚了。我使用线程来更新calllots并且它完美地工作:D