在UIButton Action事件之前调用prepareForSegue

时间:2018-11-28 12:19:54

标签: ios objective-c ibaction

以下是我的按钮动作事件代码。

-(IBAction)reportRepair{

    if(![Common hasReportRepairURL]){

        NSArray *forms = [[self delegate] getFormsForSection:@"REPORTREPAIR"];
        if(forms.count == 0){
            [self performSegueWithIdentifier:@"ReportRepairView" sender:self];
        }else if(forms.count == 1)
            [self getFormByFormID:[[forms objectAtIndex:0] intValue]];
        else
            [self performSegueWithIdentifier:@"FormsView" sender:self];
    }
}

并且prepareForSegue如下:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([[segue identifier] isEqualToString: @"RepairDetailView"]){
        RepairDetailViewController *dest = (RepairDetailViewController *) [segue destinationViewController];
        dest.job = self.selectedJob;
        dest.tenancy = self.tenancy;
    }else if([[segue identifier] isEqualToString: @"ReportRepairView"]){
        ReportRepairViewController *dest = (ReportRepairViewController *) [segue destinationViewController];
        dest.tenancy = self.tenancy;
    }else if([[segue identifier] isEqualToString: @"FormsView"]){
        FormsSearchViewController *dest = (FormsSearchViewController *) [segue destinationViewController];
        dest.allowedForms = [[self delegate] getFormsForSection:@"REPORTREPAIR"];
        dest.tenancy = self.tenancy;
        dest.formSectionType = @"REPORTREPAIR";
    }else if([[segue identifier] isEqualToString: @"FormView"]){
        FormViewController *dest = (FormViewController *) [segue destinationViewController];
        dest.form = self.form;
        dest.tenancy = self.tenancy;
        dest.formSectionType = @"REPORTREPAIR";
    }
    else if([[segue identifier] isEqualToString: @"RepairsWebView"]){
        WebViewController *dest = (WebViewController *) [segue destinationViewController];
        dest.siteURL = [Common getReportRepairURL:self.tenancy];
        dest.screenTitle = AGLocalizedString(@"Report a Repair", @"Report a Repair");
    }
}

当我调试代码时,我知道,在Action事件之前会调用prepareForSegue方法。因此,从UI的角度来看,我在应用程序中遇到一些异常行为。

2 个答案:

答案 0 :(得分:0)

您应该使用“按钮”单击或从View控制器中选择按钮,但不能同时使用两者。因此,请确保先在情节提要中的视图控制器中添加了segues,然后再将其删除。

重要提示:

  • 当我们直接从情节提要板视图控制器添加segues时,视图将立即在视图出现时立即调用prepareForSegue方法,并且不会等待按钮单击事件。

希望有帮助。

答案 1 :(得分:-1)

尝试进行如下图所示的搜索。不要从Button绘制视图到ViewController。如果已经添加了segue,则将其删除。

enter image description here

相关问题