我的应用程序中有一个计数器,它有一个重置按钮,但我没有在点击后立即重置,我想要弹出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
}
}
}
答案 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];
}
}
}