2011-12-02 4 views
5

Ho letto altre domande qui, ma sembrano essere per Xcode 3.2 o precedenti, ma nulla per 4.2. :(IBOutlet non si connette in Interface Builder- Xcode 4.2

ho iniziato un progetto semplice e mancava di connettersi Outlet del proprietario del file nel mio XI ter. Il vero guaio è che i miei IBOutlet di dai miei ViewController.h non sono venuta sopra.

non ho . una reputazione di 10 o superiore, in modo da here is a screenshot of my File's Owner not showing my IBOutlets

Ecco il mio codice ViewController.h:

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController { 
    IBOutlet UITextField *txtName; 
    IBOutlet UILabel *lblMessage; 
} 

@property (nonatomic, retain) IBOutlet UITextField *txtName; 
@property (nonatomic, retain) IBOutlet UILabel *lblMessage; 

- (IBAction)doSomething; 

@end 

Ecco il mio codice ViewController.m:

#import "ViewController.h" 

@implementation ViewController 

@synthesize txtName; 
@synthesize lblMessage; 

- (IBAction) doSomething 
{ 
    NSString *msg = [[NSString alloc] initWithFormat:@"Hello, %@",txtName.text]; 
    [lblMessage setText:msg]; 
} 

@end 

Sono nuovo di Objective-C e Xcode, quindi avrei potuto commettere un errore, ma ho seguito molti tutorial e non riesco mai a mostrare i miei IBOutlet. Sono arrivato al punto di cancellare Xcode 4.2 e reinstallato per provare a risolvere questo problema. Ecco uno screenshot of my Xcode Version 4.2, Build 4D199 info.

Qualcun altro si è imbattuto in questo problema? Grazie a chiunque possa segnalare eventuali errori che ho commesso. Per favore fatemi sapere se sono necessarie ulteriori informazioni.

risposta

16

Quando si crea IBAction, nel file .h, ci sarà un indicatore di connessione a sinistra di esso. Quando non è collegato mostra un cerchio vuoto.

Tenere premuto questo e trascinarlo sull'elemento a cui si desidera collegarlo. Solitamente apro XIB in una nuova finestra facendo doppio clic su di esso.

Connect the IBAction to your button by dragging from the the .h file


Se solito si collega è necessario impostare la File's Owner nel file XIB. Seleziona File's Owner nel pannello Segnaposto. Passa al pannello Utilità e assicurati che lo Custom class, in Identity Inspector, sia impostato su qualsiasi nome venga chiamato.

Set files owner

Spero che questo vi aiuterà.

Cheers!

+0

La seconda parte di questo ha fatto il trucco. Suppongo di aver pensato che fosse impostato di default. Apprezzo molto l'aiuto e gli screenshot! – scared

+0

Ho provato quasi tutto, ma il tuo primo trucco di aprire una nuova finestra e poi di trascinarlo ha funzionato. – nasaa

+0

Grazie, anche la tua risposta mi ha aiutato. Upvote. – DrinkJavaCodeJava

4

Provare a riassegnare il riferimento della classe del proprietario del file nel file xib.

Quindi collegare tutte le connessioni IBOutlet.

Spero che questo possa esserti utile.

+0

Questo ha fatto il trucco, grazie! – scared

+0

Come riassegnare ?? – Developer

0

Due cose devono essere aggiunti, prima di Xcode permette la creazione di IBOutlet per il campo di testo dal Storyboard:

  1. Assegnare il ViewController sottostante come il delegato al UITextField
  2. Aggiungere il al dichiarazione @interface nel ViewController.h di file:

    @interface ViewController: UIViewController < UITextFieldDelegate>

Fino entrambi questi sono stati completati, è possibile Ctrl-clic e trascinare dallo storyboard al file h, ma non IBOutlet la connessione sarà abilitata.

0

Ho finalmente capito il problema, spero che questo aiuti qualcun altro al momento ad avere lo stesso problema. Non ha avuto nulla a che fare con l'impostazione del proprietario del file di xib. Il mio problema era che avevo il file xib in una directory diversa da quella dei file sorgente, quindi non era in grado di collegare le prese. Una volta trasferiti i file nella stessa directory, tutto ha funzionato. Cordiali saluti, ho spostato tutto nella directory principale. Non sono sicuro che le sottodirectory funzioneranno ...

Per spostare i file, assicurarsi di aggiornare xcode in modo che punti alle nuove posizioni.