2012-03-06 71 views
0

我在我的應用程序中有一個計數器,它有一個重置按鈕,但不是在輕按後立即重置,我想要一個UIAlertView彈出並讓用戶再次點擊重置爲警報中的按鈕。我在這方面並不完全有經驗,所以我會問你的答案只是簡單地添加/替換下面的代碼部分。我正在研究這個笑話。謝謝你的幫助!IBIAction在UIAlertView xcode 4.3

- (IBAction)reset { 
    UIAlertView *alert = [[UIAlertView alloc] 

          initWithTitle:@"titleHere" 
          message:@"messageHere" 
          delegate: self 
          cancelButtonTitle:@"Cancel" 
          otherButtonTitles:@"Reset", nil]; 
    alert.tag = TAG_RESET; 
    [alert show]; 
} 

-(void)alertView:(UIAlertView *)alertView 
clickedButtonAtIndex:(NSInteger)buttonIndex { 
    if (alertView.tag == TAG_DEV) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.examplesite.com"]]; // just another alert don't worry about this one 
    } else if (alertView.tag == TAG_RESET) { // i need help here   
    } 
} 

所以基本上只是一個警報內的IBAction。

UPDATE: 如何將納入這按鈕?

-(IBAction)zero { 
    counter=0; 
    count.text = [NSString stringWithFormat:@"%i",counter]; 
} 

UPDATE2:

所以我這樣做,現在完全清除計數,唯一的問題是現在的警報不斷彈出你點擊取消或者重置後...

-(IBAction)resetButtonPushed { 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"titleHere" 
                message:@"messageHere" 
                delegate:self 
              cancelButtonTitle:@"Cancel" 
              otherButtonTitles:@"Reset", nil]; 
    alert.tag = TAG_RESET; 
    [alert show]; 
} 

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
    if (alertView.tag == TAG_DEV){ 
     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.examplesite.com"]]; // just another alert don't worry about this one 
    } 
    else if (alertView.tag == TAG_RESET) { [self resetButtonPushed]; { 
     counter=0; 
     count.text = [NSString stringWithFormat:@"%i",counter]; 
    }  if ([[alertView buttonTitleAtIndex:buttonIndex] isEqualToString:@"Reset"]){ 
     // Reset button tapped 
     } 
    } 
} 
+1

我不明白你要完成什麼。當用戶在UI上按下按鈕時調用重置方法;它會顯示帶有重置按鈕的警報。如果用戶按下該按鈕,則會調用clickedButton回調。在if(alertView.tag == TAG_RESET)中,您知道重置已被按下,所以此時您清除了計數器。我錯過了什麼? – 2012-03-06 22:43:36

+0

我正在嘗試做幾乎所有的NJones。 – DiscoveryOV 2012-03-07 00:37:34

回答

0

我建議不要弄髒您的zero功能IBAction當你看到在你的代碼後,它會引起混亂。

您的重置方法的命名也可能會造成混淆。我會建議一個更具描述性的名字。並且還使用接收發送者參數的標準IBAction方法簽名。像這樣:

-(IBAction)resetButtonPushed:(id)sender { 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"titleHere" 
                message:@"messageHere" 
                delegate: self 
              cancelButtonTitle:@"Cancel" 
              otherButtonTitles:@"Reset", nil]; 
    alert.tag = TAG_RESET; 
    [alert show]; 
} 

這似乎是你所熟悉的UIAlertViewDelegate範式等待回調。由於您使用的是-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex,因此您可以使用傳遞給委託方法的clickedButtonAtIndex:(NSInteger)buttonIndex參數。像這樣:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
    if (alertView.tag == TAG_DEV){ 
     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.examplesite.com"]]; // just another alert don't worry about this one 
    } 
    else if (alertView.tag == TAG_RESET) { 
     if (buttonIndex == alertView.cancelButtonIndex){ 
      // reset alert cancel button was tapped 
     } 
     else { 
      // Reset button tapped 
     } 
    } 
} 

或者你可以這樣做:

if ([[alertView buttonTitleAtIndex:buttonIndex] isEqualToString:@"Reset"]){ 
    // Reset button tapped 
} 

響應本節評論

我不知道你爲什麼難以理解如何請撥打您的zero方法。我認爲這是因爲術語IBAction不必要地分散了你的注意力。 IBAction是另一種說法void。唯一的區別是,當您使用IBAction界面生成器「看到」該方法時。就代碼而言,以下兩種方法定義是相同的。

-(void)zero; 
-(IBAction)zero; 

同樣我也建議對IBAction和更具描述性的方法名。也許是這樣的:

-(void)zeroTheCounter { 
    counter=0; 
    count.text = [NSString stringWithFormat:@"%i",counter]; 
} 

你當然會調用這個方法就像任何其他的,在從上面的例子中上下文中使用它。

 else { 
      // Reset button tapped 
      [self zeroTheCounter]; 
     } 

迴應,以「編輯2」當然它顯示了另一個警報視圖,你要求它與在alertview委託方法的調用[self resetButtonPushed]

此編輯使用您當前的代碼問題。

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
    if (alertView.tag == TAG_DEV){ 
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.examplesite.com"]]; // just another alert don't worry about this one 
    } 
    else if (alertView.tag == TAG_RESET) { 
     //[self resetButtonPushed]; { calling this will cause another alertview. 
        //counter=0; this is done is zero 
        //count.text = [NSString stringWithFormat:@"%i",counter]; this is done in zero 
     //} 
     if ([[alertView buttonTitleAtIndex:buttonIndex] isEqualToString:@"Reset"]){ 
         // Reset button tapped 
      [self zero]; 
        } 
    } 
} 
+0

請看原始問題中的更新。 – DiscoveryOV 2012-03-06 23:55:22

+0

@ R3TRI8UTI0N我添加到我的答案,我希望它清除了事情。 – NJones 2012-03-07 02:46:13

+0

更新的問題:UPDATE2: 感謝您的幫助。 – DiscoveryOV 2012-03-08 23:42:25