2

私のプログラムでは、ビューにアイテムのリストを作成します。特定のアイテムをクリックすると、別のビューを開いて、そのアイテムに関連する情報を確認します。

しかし、前のビューに戻っても、ナビゲーションコントローラーはスタックからビューを削除しません。実際、前のビューコントローラーに戻った後、別のアイテムまたは同じアイテムをクリックして情報を表示すると、ナビゲーションコントローラーのビューは同じ数に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];
    }
}
4

0 に答える 0