2012-01-05 95 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