单击 alertView 按钮时我无法调用一个 IBaction

Posted

技术标签:

【中文标题】单击 alertView 按钮时我无法调用一个 IBaction【英文标题】:I could not able to call one IBaction on click of alertView button 【发布时间】:2015-08-20 10:34:24 【问题描述】:

我在这样的方法中声明了一个 alertView。

UIAlertView* alertView =[[UIAlertView alloc]initWithTitle:@"Check In Alert" message:@"Are you sure he/she is there?" delegate:self cancelButtonTitle:@"Yes" otherButtonTitles:@"No", nil];
                        alertView.tag = sender;
                        [alertView show];

所以在 clickedButtonIndex 的 alertView 方法中我有这段代码。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

    if([alertView.title isEqualToString:@"Check In Alert"])
    
        ClassRoomParticipant *clsrp;
        NSMutableArray *data = nil;
        data=[self.presentDataArray objectAtIndex:0];
        clsrp = (ClassRoomParticipant *)[data objectAtIndex:alertView.tag];
        NSLog(@"Do Nothing");
        if (buttonIndex == 0)
        

            [clsrp setGetParcpntCheckInStatus : 2];// Checked in by Teacher

        
        else if (buttonIndex == 1)
        

            [clsrp setGetParcpntCheckInStatus : 3];// Not checked in by Teacher, still Absent

        
        return;
    
    NSString *title = [alertView buttonTitleAtIndex:buttonIndex];

    if([title isEqualToString:@"OK"])
    
        [self.navigationController popViewControllerAnimated:YES];
    
    else if([title isEqualToString:@"Button 2"])
    
        //NSLog(@"Button 2 was selected.");
    
    else if([title isEqualToString:@"Button 3"])
    
        //NSLog(@"Button 3 was selected.");
    

我有这样的方法。

-(void)changeStudentAction:(id)sender

    CustomUIButton *button=sender;
    NSInteger flag = 0;
    if (button.selected)
    
        [button setSelected:NO];
        [button setBackgroundImage:[UIImage imageNamed:@"Absent_on_coloured.png"] forState:UIControlStateNormal];
        flag=0;
    
    else
    
        [button setSelected:YES];
        [button setBackgroundImage:[UIImage imageNamed:@"Present_on_coloured.png"] forState:UIControlStateNormal];
        flag=1;
    

    if (button.collectionIdentifier == ClsRmPrctPresntCollectionView)
    
        [self ModifyDataArray:button.taggy flag:flag identifier:ClsRmPrctPresntCollectionView change:@"Button" toDate:nil section:button.section];
        [self modifyCollectionArray:PRESENT processingData:self.presentDataArray identifier:ClsRmPrctPresntCollectionView index:button.taggy section:button.section];
    

    self.isAnyChangesHappened=YES;

我想在 alertView 按钮中调用这个 changeStudentAction 方法,单击“是”。当我在 buttonIndex==0 中调用这个方法时,它给了我错误。能否请您告诉我如何在警报视图中调用此方法。

【问题讨论】:

【参考方案1】:

1) 创建一个“CustomUIButton”的出口,其中“changeStudentAction”是行动

2) 在警报视图中委托调用[self changeStudentAction:self.customUIbuttonOutlet]

【讨论】:

【参考方案2】:

我猜它因为alertView.tag = sender; 声明而向您显示错误。确保sender 是整数。

你也没有设置alertView的委托。试试这个:alertView.delegate = self;

休息一切似乎都很完美。只需在- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 方法的正确块中调用changeStudentAction 方法即可。

【讨论】:

我已经为 alertView 设置了委托。现在我想在 alertView 中调用 changeStudentAction 方法。我可以这样调用 if (buttonIndex == 0) [self changeStudentAction:(id)clsrp];但它正在崩溃。显示“由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[ClassRoomParticipant isSelected]:无法识别的选择器发送到实例 0x7a7b7ac0” 这是因为您的变量“clsrp”属于“ClassRoomParticipant”类。当您在“changeStudentAction”方法中将此变量映射到“CustomUIButton”时,这是无效的。

以上是关于单击 alertView 按钮时我无法调用一个 IBaction的主要内容,如果未能解决你的问题,请参考以下文章

带有视图控制器的 Xcode 和 alertview

为啥单击按钮时我的 reactstrap 模式没有打开?

简单的 Tk 应用程序 - 单击按钮即可绘制

为啥单击按钮时我的选项卡没有变化?

iphone Mail App Popup 样式 alertview

QPrinter 单击按钮时我的程序崩溃为啥?