UIAlertView xcode 4.3中的IBAction

时间:2012-03-06 22:29:18

标签: xcode tags uialertview ibaction

我的应用程序中有一个计数器,它有一个重置按钮,但我没有在点击后立即重置,我想要弹出UIAlertView并让用户再次点击重置作为警报中的按钮。我在这方面并不是很有经验,所以我会问你的答案只是简单地添加/替换下面的部分代码。我正在研究这个哈哈。谢谢你的帮助!

- (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。

更新: 的 我如何将其合并到按钮?

-(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 个答案:

答案 0 :(得分:0)

我建议您在查看代码时将zero功能标记为IBAction,这会让您感到困惑。

重置方法的命名也可能令人困惑。我会建议一个更具描述性的名字。并且还使用接收sender参数的标准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];
        }
    }
}