prepareForSegue 在 UIButton Action 事件之前调用

prepareForSegue called before UIButton Action event

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

-(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 的角度来看,我在我的应用程序中遇到了一些异常行为。

尝试制作如下图所示的转场。不要从 Button 绘制 segues 到 ViewController。如果添加了 segues,则已将其删除。

您应该使用 Button click 或 segues from View controller,但不能同时使用两者。因此,请确保如果已经在故事板的视图控制器中添加了 segue,请先将其删除。

重要提示:

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

希望对您有所帮助。