Ios UIAlertView按钮操作不工作
我有一个警报视图,当我点击yes按钮时,它应该会产生另一个警报视图和一条toast消息,但它不会发生。我想不出来。这是我的密码:Ios UIAlertView按钮操作不工作,ios,uialertview,Ios,Uialertview,我有一个警报视图,当我点击yes按钮时,它应该会产生另一个警报视图和一条toast消息,但它不会发生。我想不出来。这是我的密码: -(void)myMethod { UIAlertView *saveAlert = [[UIAlertView alloc] initWithTitle:@"First Message" message:@"My First message"
-(void)myMethod {
UIAlertView *saveAlert = [[UIAlertView alloc] initWithTitle:@"First Message"
message:@"My First message"
delegate:nil
cancelButtonTitle:@"No"
otherButtonTitles:@"Yes", nil];
saveAlert.tag=0;
[saveAlert performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:NO];
}
这是我用来为不同警报视图提供功能的方法
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if(alertView.tag==0) {
if (buttonIndex == 0)
{
//Code for Cancel button
}
if (buttonIndex == 1)
{
//code for yes button
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];
hud.mode = MBProgressHUDModeText;
hud.labelText = @"Successfully displayed First Message";
hud.margin = 10.f;
hud.yOffset = 150.f;
hud.removeFromSuperViewOnHide = YES;
[hud hide:YES afterDelay:3];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Second Message"
message:@"My second message"
delegate:nil
cancelButtonTitle:@"No"
otherButtonTitles:@"Yes",nil];
alert.tag=1;
[alert performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:YES];
}
}
if (alertView.tag==1) {
if (buttonIndex == 0)
{
//Code for Cancel button
}
if (buttonIndex == 1)
{
//Code for yes Button
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];
hud.mode = MBProgressHUDModeText;
hud.labelText = @"Succesfully displayed Second Message";
hud.margin = 10.f;
hud.yOffset = 150.f;
hud.removeFromSuperViewOnHide = YES;
[hud hide:YES afterDelay:3];
}
}
}
有人能帮忙找到问题吗。为什么在单击第一个警报中的“是”按钮后无法获取第二个警报?您正在指定nil作为警报视图的代理。您需要指定一个对象,以便可以调用alertView:ClickedButtonIndex:方法 您尚未为您的
UIAlertView
设置代理,还必须确保您的代理符合UIAlertViewDelegate
协议。找到下面的代码片段
您的控制器符合UIAlertViewDelegate
协议:
@interface YourViewController : UIViewController <UIAlertViewDelegate>
实施UIAlertViewDelegate
delegate方法:
- (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if( 0 == buttonIndex ){ //cancel button
[alertView dismissWithClickedButtonIndex:buttonIndex animated:YES];
} else if ( 1 == buttonIndex ){
[alertView dismissWithClickedButtonIndex:buttonIndex animated:YES];
UIAlertView * secondAlertView = [[UIAlertView alloc] initWithTitle:@"Second Message"
message:@"Displaying second message"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[secondAlertView show];
}
}
如果您想更清楚地处理此问题,可以使用基于块的AlertView。 创建新文件->子类->UIAlertView SuperAlertView.h
#import <UIKit/UIKit.h>
@class MySuperAlertView;
typedef void (^MySuperAlertViewBlock) (MySuperAlertView *alertView);
@interface MySuperAlertView : UIAlertView
- (instancetype) initWithTitle:(NSString *)title message:(NSString *)message;
- (void) addButtonWithTitle:(NSString *)buttonTitle block:(MySuperAlertViewBlock) block;
@end
@Teja_NVM如果有帮助,您可以接受作为答案或投票,谢谢。
#import <UIKit/UIKit.h>
@class MySuperAlertView;
typedef void (^MySuperAlertViewBlock) (MySuperAlertView *alertView);
@interface MySuperAlertView : UIAlertView
- (instancetype) initWithTitle:(NSString *)title message:(NSString *)message;
- (void) addButtonWithTitle:(NSString *)buttonTitle block:(MySuperAlertViewBlock) block;
@end
#import "MySuperAlertView.h"
@interface MySuperAlertView()<UIAlertViewDelegate>
@property NSMutableArray *blocks;
@end
@implementation MySuperAlertView
- (instancetype)initWithTitle:(NSString *)title message:(NSString *)message
{
if (self = [super initWithTitle:title message:message delegate:self cancelButtonTitle:nil otherButtonTitles:nil])
{
self.blocks = [NSMutableArray array];
}
return self;
}
- (void)addButtonWithTitle:(NSString *)buttonTitle block:(MySuperAlertViewBlock)block
{
[self addButtonWithTitle:buttonTitle];
[self.blocks addObject:block ? [block copy] : [NSNull null]];
}
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
MySuperAlertViewBlock block = self.blocks[buttonIndex];
if ((id) block != [NSNull null]){
block(self);
}
}
@end
MySuperAlertView *alertView = [[MySuperAlertView alloc] initWithTitle:@"Info" message:NSLocalizedString(@"EMAIL_SENT_SUCCESSFULL", nil)];
[alertView addButtonWithTitle:@"Ok" block:^(MySupertAlertView *alertView) {
// handle result from ok button here
}];
[alertView addButtonWithTitle:@"cancel" block:NULL];
dispatch_async(dispatch_get_main_queue(), ^{
[alertView show];
});