Input text

di il
18 risposte

Input text

Salve, sono alle prime armi con la programmazione iOS, nell'app che sto sviluppando c'è la necessità che l'utente scriva in una textfield un testo e riceva, dopo aver cliccato un bottone, un numero assegnato da me alla variabile che ha come nome, la parola che l'utente ha digitato. gentilmente qualcuno riesce a spiegarmi come fare? ho provato a scrivere l'app come se la parola della textfield fosse solo una text normale ma non va... Grazie in anticipo, Speuk

18 Risposte

  • Re: Input text

    Non credo di aver capito bene quali siano le tue intenzioni, però me ne vado per un'idea.. Semmai non fosse cosi, spiegami meglio e vediamo che si può fare.

    Tu hai una UITextField ed un UIButton e vuoi usare ciò che l' utente scrive nella textfield come nome della variabile, assegnando a questa variabile un numero?

    Ignoro i motivi, ma se fosse così io ti consiglio di usare un dizionario.
    Presupponendo che tu abbia un attributo di classe NSMutableDictionary e una UITextField, ad esempio
    NSMutableDictionary* myDictionary;
    UITextField* textField;
    potresti fare in questo modo nel metodo del bottone:
    
    [myDictionary setValue:[NSNumber numberWithInt:ILTUONUMEROINTERO] forKey:textField.text];
    
    In un secondo momento accedi a questo dictionary usando come chiave il testo della textfield, per farti ritornare il tuo intero.
  • Re: Input text

    Scusa ora provo a spiegarmi meglio, ti faccio un esempio:
    io ho assegnato alla variabile "ciao" il numero 2.
    ora ho: una UItextfield, Un UIbotton e un label.
    A questo punto l' utente scrive nella textfield "ciao" e preme il bottone, dopo aver fatto questo il testo del label diventa 2. Spero tu capisca, Grazie mille .
    p.s. potresti spiegarmi anche cos'è un dictionary?
  • Re: Input text

    Premesso che tu abbia degli IBOutlet di classe, ovvero una UITextField (che chiamerò textField), una UILabel (che chiamerò label) e un NSMutableDictionary (che chiamerò data), ti scrivo il codice.

    Nel viewDidLoad:
    
    - (void) viewDidLoad
    {
        [super viewDidLoad];
        //Istanzio il mio dizionario
        data = [NSMutableDictionary alloc] init];
        //Gli associo alla chiave "ciao" il valore 2
        [data setValue:@"2" forKey:@"ciao"];
    }
    
    Nel metodo del bottone, l' IBAction
    
    - (IBAction) updateLabel:(id)sender
    {
        //Richiedo il valore associato alla chiave che l utente ha scritto nella textfield
        NSString *value = [data valueForKey:textField.text];
       
        //Se esiste un valore corrispondente a quella chiave
        if (value && value.length > 0)
        {
            //Imposto il mio valore ("2") come testo della label
            label.text = value;
        }
    }
    
    Spero si capisca. L' NSDictionary (o NSMutableDictionary) è una struttura dati che è composta da oggetti chiave/valore. In sostanza aggiungi dei valori e li associ a delle chiavi. In seguito accedi a quei valori tramite le chiavi (un po come negli array accedi a delle variabili tramite l' indice).
  • Re: Input text

    Abbi pazienza ma non penso di aver capito pienamente, sono alle prime armi,
    ho provato a fare così:
    allora ho
    -nell'interfaccia grafica un UIlabel, UIbutton e un UItextfield
    -nel file viewcontroller.h
      
    @interface ViewController : UIViewController{
        IBOutlet UILabel *Label;
        IBOutlet UITextField *TextField;
        IBOutlet NSMutableDictionary *data;
    }
    
    -(IBAction)Button:(id)sender;
    
    
    e ho collegato il bottone, la textfield e il label ai rispettivi oggetti nell'interfaccia grafica.
    -nel file viewcontroller.m
    - (void)viewDidLoad
    {
        [super viewDidLoad];
     data=[[NSMutableDictionary alloc] init];
        [data setValue:@"2" forKey:@"ciao"];
    	// Do any additional setup after loading the view, typically from a nib.
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    -(IBAction)Benvenuto:(id)sender;{
        
        //Richiedo il valore associato alla chiave che l utente ha scritto nella textfield
        NSString *value = [data valueForKey:TextField.text];
        
        //Se esiste un valore corrispondente a quella chiave
        if (value && value.length > 0)
        {
            //Imposto il mio valore ("2") come testo della label
            Label.text = value;
        }
    
    A questo punto faccio partire l'app, ma si chiude subito il simulatore e si apre questa finestra in xcode
    #import <UIKit/UIKit.h>
    
    #import "AppDelegate.h"
    
    int main(int argc, char * argv[])
    {
        @autoreleasepool {
            return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
        }
    }
    
    e si evidenzia la scritta
      return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    e sotto scrive "thread 1:signal SIGABRT
    sai dirmi dove ha sbagliato? Grazie per la pazienza
  • Re: Input text

    Ci sono un paio di cose che non quadrano.
    Andiamo per ordine:

    1) Nel .h inserisci gli attributi di classe e le firme dei metodi, senza implementazione. Quindi:
    
    @interface ViewController : UIViewController{
        IBOutlet UILabel *Label;
        IBOutlet UITextField *TextField;
       NSMutableDictionary *data;
    }
    
    -(IBAction)Button:(id)sender;
    
    L' outlet ti occorre solo se devi collegarlo al corrispettivo nello xib (interfaccia grafica), quindi data devi dichiararlo senza IBOutlet. Inoltre ti faccio notare che qui, il metodo collegato al bottone lo hai chiamato Button, quindi il sistema chiamerà il metodo Button:(id)sender alla pressione del bottone.

    2) nel .m hai questo codice
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        data=[[NSMutableDictionary alloc] init];
        [data setValue:@"2" forKey:@"ciao"];
       // Do any additional setup after loading the view, typically from a nib.
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    -(IBAction)Button:(id)sender;{
        
        //Richiedo il valore associato alla chiave che l utente ha scritto nella textfield
        NSString *value = [data valueForKey:TextField.text];
        
        //Se esiste un valore corrispondente a quella chiave
        if (value && value.length > 0)
        {
            //Imposto il mio valore ("2") come testo della label
            Label.text = value;
        }
    
    Avevi qui implementato una IBAction chiamata Benvenuto:(id)sender, quindi quando premi il bottone il sistema cerca nel .m l' implementazione nel metodo a lui collegato e dichiarato nel .h (Button:(id)sender) e non la trova. Quindi in questo codice ho cambiato Benvenuto con Button.


    Ora ti sto scrivendo senza provare da xCode però dovrebbe funzionare. Prova a vedere se cosi va, altrimenti do un occhiata con l' IDE.
  • Re: Input text

    Grazie mille! funziona!
    era proprio quello che cercavo!
  • Re: Input text

  • Re: Input text

    Sai dirmi gentilmente anche come posso fare in modo che il valore che assegno alla chiave di un dizionario sia un intvalue invece che @"numero"?
    ti spiego: dovrei sommare i valori ( es. ciao=2; benvenuto=3; l'utente scrive in due Uitextfield diverse "ciao" e "benvenuto" e dopo aver schiacciato il bottone, label=5)
    ho provato con il metodo in precedenza ma non funziona perchè "value" é nsstring e quindi non posso fare operazioni.
  • Re: Input text

    I dizionari prendono come valore degli oggetti, quindi int non puoi passarglielo. Per risolvere questo problema solitamente si usa l' NSNumber
    [NSNumber numberWithInt:2]
  • Re: Input text

    Scusa ma temo di non aver capito, a cosa devo cambiare nel codice di prima?
    ho provato a cambiarlo con @"2" ma da errore.
  • Re: Input text

    ViewDidLoad
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        data=[[NSMutableDictionary alloc] init];
        [data setValue:[NSNumber numberWithInt:2] forKey:@"ciao"];
       // Do any additional setup after loading the view, typically from a nib.
    }
    
    IBAction
    
    -(IBAction)Button:(id)sender
    {    
        //Richiedo il valore associato alla chiave che l utente ha scritto nella textfield
        NSString *value = [data valueForKey:TextField.text];
        
        //Se esiste un valore corrispondente a quella chiave
        if (value && value.length > 0)
        {
            //Imposto il mio valore ("2") come testo della label
            Label.text = [value stringValue];
        }
    }
    
  • Re: Input text

    Ok grazie
    devo ancora provare con xcode, ma sei sicuto che questo codice che metto sotto vada bene anche con nsnumber?
        //Se esiste un valore corrispondente a quella chiave
        if (value && value.length > 0)
        intendo length
  • Re: Input text

    Bravo, ho sbagliato (non nella linea che hai detto tu, ma va bene uguale )

    ecco a te
    
    -(IBAction)Button:(id)sender
    {    
        //Richiedo il valore associato alla chiave che l utente ha scritto nella textfield
        NSString *value = [[data valueForKey:TextField.text] stringValue];
        
        //Se esiste un valore corrispondente a quella chiave
        if (value && value.length > 0)
        {
            //Imposto il mio valore ("2") come testo della label
            Label.text = value;
        }
    }
    
  • Re: Input text

    Non funziona purtroppo
Devi accedere o registrarti per scrivere nel forum
18 risposte