2009-11-16 84 views
0

我有後按下按鈕,我想一個循環運行,直至達到條件這裏有一個問題...循環,直到條件達到iPhone

- (IBAction)buttonclick1 ... 

if ((value2ForIf - valueForIf) >= 3) { ... 

我想一個循環運行至

((value2ForIf - valueForIf) >= 3) 

然後執行與IF語句相關的代碼。

我打算實現的是在繼續執行代碼之前,繼續檢查上述語句是否爲真的程序。除此之外,在IF之下還有一個else語句,但我不知道這是否會影響循環。

我不確定這裏所需的循環格式,我試過的所有東西都會導致錯誤。任何幫助將不勝感激。

斯圖

回答

2
- (IBAction)buttonclick1 ... 
{ 
    //You may also want to consider adding a visual cue that work is being done if it might 
    //take a while until the condition that you're testing becomes valid. 
    //If so, uncomment and implement the following: 

    /* 
    //Adds a progress view, note that it must be declared outside this method, to be able to 
    //access it later, in order for it to be removed 
    progView = [[MyProgressView alloc] initWithFrame: CGRectMake(...)]; 
    [self.view addSubview: progView]; 
    [progView release]; 

    //Disables the button to prevent further touches until the condition is met, 
    //and makes it a bit transparent, to visually indicate its disabled state 
    thisButton.enabled = NO; 
    thisButton.alpha = 0.5; 
    */ 

    //Starts a timer to perform the verification 
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: 0.2 
          target: self 
          selector: @selector(buttonAction:) 
          userInfo: nil 
          repeats: YES]; 
} 


- (void)buttonAction: (NSTimer *) timer 
{ 
    if ((value2ForIf - valueForIf) >= 3) 
    { 
    //If the condition is met, the timer is invalidated, in order not to fire again 
    [timer invalidate]; 

    //If you considered adding a visual cue, now it's time to remove it 
    /* 
     //Remove the progress view 
     [progView removeFromSuperview]; 

     //Enable the button and make it opaque, to signal that 
     //it's again ready to be touched 
     thisButton.enabled = YES; 
     thisButton.alpha = 1.0; 
    */ 

    //The rest of your code here: 
    } 
} 
+0

感謝您的深入解答。你能幫我進一步,雖然...我怎麼聲明progView和buttonAction? – Stumf 2009-11-16 23:46:25

+0

progView是一個進度視圖,您可以在InterfaceBuider中或在UIView子類的代碼中創建自己。 buttonAction聲明爲我寫的,只是複製粘貼代碼,並在.h文件中添加以下行:* - (void)buttonAction:(NSTimer *)timer; * – luvieere 2009-11-17 11:37:15

+0

現在就工作了,正是我所做的尋找...和一些!非常感謝luvieere。 – Stumf 2009-11-18 23:50:54

2

而不是運行一個緊密的循環,這將阻止在另一個線程的應用程序的執行,除非運行,你可以使用一個NSTimer在自己選擇的時間間隔來調用一個方法,並檢查條件在方法。如果條件滿足,您可以使計時器無效並繼續。

1

從你說什麼,你想要的是一個while循環

while((value2ForIf - valueForIf) < 3) { ...Code Here... } 

這隻要值差小於3運行在括號中的代碼,這意味着它將運行,直到它們的區別是3或更大。但正如Jasarien所說。這是一個壞主意,因爲你會阻止你的程序。如果值正在被代碼本身更新,那很好。但是,如果它們由用戶的某個用戶界面進行更新,則while循環會阻止用戶界面,並且不允許用戶輸入任何內容。

+0

使用while循環會導致我的else語句出錯(在'else'之前的語法錯誤)。我該如何解決這個問題? – Stumf 2009-11-16 23:49:04

+0

認爲我知道了,使用IF。我正在尋找代碼來運行,只要差異大於等於3.代碼應該檢查值,直到這種情況,然後繼續。將使用while((value2ForIf - valueForIf)> = 3){...工作? – Stumf 2009-11-16 23:55:07

+0

如果您決定再次按下該按鈕,則兩個值相距3時App不執行任何操作,然後進入崩潰狀態。有任何想法嗎? – Stumf 2009-11-17 00:07:44