iOS - 导航控制器不会从堆栈中删除视图控制器

时间:2012-07-06 14:20:50

标签: objective-c ios stack viewcontroller navigationcontroller

在我的程序中,我在视图中创建一个Item列表。当我点击某个特定项目时,我打开另一个视图以查看与该项目相关的信息。

但是当我回到上一个视图时,导航控制器不会从堆栈中删除视图,事实上,在我返回到上一个视图控制器之后,如果我点击另一个或者显示信息的相同项目,导航控制器视图是相同的数字加1,当我尝试返回时,他首先加载项目信息的相同视图,然后加载项目列表。

实施例

查看项目列表:查看A

查看信息:查看B

第1步:在视图A中加载项目

步骤2:单击视图A中的项目1并按下堆栈上的视图B

第3步:从A

弹出B

步骤4:在视图A中单击项目2并按下堆栈上的视图B

在第4步我的堆栈是:A - B - B ....为什么?

编辑:

以下是第2步:

-(void) clickOnSpesa:(NSNotification*)notification
{
    NSDictionary *userInfo = notification.userInfo;
    Spesa *spesa = [userInfo objectForKey:@"notaSpesa"];

    //Cambio View
    NuovaSpesa *viewSpesa = [[NuovaSpesa alloc] initWithNibName:nil bundle:nil];
    NSLog(@"creo la view per visualizzare la spesa");
    [viewSpesa initWithSpesa:spesa];
    [self.navigationController pushViewController:viewSpesa animated:YES];
}

第3步:

-(void) previousView:(id)sender
{
    [self.navigationController popViewControllerAnimated:YES];
}

InitWithSpesa:

-(void)initWithSpesa:(Spesa *)spesa
{   
    //Info
    [GeneralManager showInvioTable];

    self.spesaFromGestione = spesa;

    //Setto il resto come non modificabile se la spesa non lo è
    bool isModificable = true;

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"dd/MM/yyyy"];
    NSString *stringDate = [formatter stringFromDate:spesa.creationDate];

    //Get delle NoteSpesa in tutte le date
    SDLDatabase *db = [[SDLDatabase alloc] initWithFile:dbPath];
    NSString *sql = [NSString stringWithFormat:@"SELECT * FROM invio WHERE data='%@'", stringDate];
    NSMutableArray *resultSpese = [db selectAllFrom:sql];
    [db close];

    if ([resultSpese count] > 0) {
        isModificable = false;   //Data già inviata e non può essere modificata
    }

    //Inserisco i valori nei relativi campi
    [btnCalendario setTitle:stringDate forState:UIControlStateNormal];
    [btnSpese setTitle:spesa.type.nome forState:UIControlStateNormal];
    [txtQuantita setText:[NSString stringWithFormat:@"%d", spesa.quant]];
    [txtCosto setText:[NSString stringWithFormat:@"%.2f", spesa.costo]];
    if (spesa.type.tipoSpesa == TIP_FIXED) {
        [txtCosto setEnabled:false];
        [self.txtCosto setAlpha:0.3];
    }
    [txtNote setText:spesa.note];

    //Foto
    NSArray *photos = [[GeneralManager sharedManager] loadImageForSpesa:spesa];

    //La salvo nel "porta" foto
    for (UIImage *image in photos) {
        [self.scrollerPhoto addPhoto:image];
    }

    if(isModificable){
        //Modificabile
        [btnSalva setTitle:@"Modifica" forState:UIControlStateNormal];
    }else{
        //Non modificabile
        [btnCalendario setEnabled:false];
        [btnSpese setEnabled:false];
        [txtQuantita setEnabled:false];
        [txtCosto setEnabled:false];
        [txtNote setEditable:false];
        [btnScattaFoto setEnabled:false];
        [btnSalva setHidden:true];
        [btnElimina setHidden:true];
    }
}

0 个答案:

没有答案