2010-07-21 29 views
11

Sadece iphone geliştirme başlarken ediyorum ben Sekmeli uygulama var ve modally yüzden burada Apple Dev baktım formda bir günlük görüntülemek istedim ve benim bakış denetleyicileri birinin içine bunu ben bağlı bir aşağıdaki eylem düğmesi:mevcut modal görünümü kontrolörü

#import "LoginForm.h" 
... 
-(IBAction)showLogin{ 
LoginForm *lf = [[LoginForm alloc]initWithNibName:@"LoginForm" bundle:nil]; 
lf.delegate = self; 
lf.modalPresentationStyle = UIModalTransitionStyleCrossDissolve; 
[self presentModalViewController:lf animated:YES]; 
} 

ben ikinci hat kurtulmak ise , kendi oluşturduğu "değil yapı veya sendika şey üye 'temsilci' talebini" olsun ama düğmeye basarak yapar inşa hiçbir şey değil.

Burada nelerin eksik?

+0

i ViewBased uygulaması üzerinde aynı kodu kullanırsanız i ikinci satırda aynı hatayı alıyorum, ama çizgiyi kaldırırsanız i düğmesine bastığınızda modal görünümü belirir. .. delegasyon için özel bir şeye ihtiyacım var mı? ve sekmeli şablon için? – irco

cevap

19

LoginForm için delegate üye bildirmemişsiniz gibi görünüyor. LoginForm bittiğinde LoginForm modasını sunan UIViewController örneğine izin veren kod eklemeniz gerekecek. LoginForm.h yılında

: LoginForm.m yılında

@class LoginForm; 

@protocol LoginFormDelegate 
- (void)loginFormDidFinish:(LoginForm*)loginForm; 
@end 

@interface LoginForm { 
    // ... all your other members ... 
    id<LoginFormDelegate> delegate; 
} 

// ... all your other methods and properties ... 

@property (retain) id<LoginFormDelegate> delegate; 

@end 

: İşte kendi temsilcisinin ilan etmek nasıl LoginForm sunar UIViewController örneğinde Sonra

@implementation 

@synthesize delegate; 

//... the rest of LoginForm's implementation ... 

@end 

(en MyViewController diyelim) : MyViewController.h yılında

:

@interface MyViewController : UIViewController <LoginFormDelegate> 

@end 
MyViewController.m olarak

:

/** 
* LoginFormDelegate implementation 
*/ 
- (void)loginFormDidFinish:(LoginForm*)loginForm { 
    // do whatever, then 
    // hide the modal view 
    [self dismissModalViewControllerAnimated:YES]; 
    // clean up 
    [loginForm release]; 
} 

- (IBAction)showLogin:(id)sender { 
    LoginForm *lf = [[LoginForm alloc]initWithNibName:@"LoginForm" bundle:nil]; 
    lf.delegate = self; 
    lf.modalPresentationStyle = UIModalTransitionStyleCrossDissolve; 
    [self presentModalViewController:lf animated:YES]; 
} 
+0

teşekkürler çok ... aradığım şey bu. Protokol bildirimi içinde söylediği son şey şu ki, şu an anlayamadığım: "Beklenen") 'LoginForm'dan önce " Onunla çok yanlış görüşmüyorum. kodunuzdaki tek fark, formumun UIViewController'dan devralmasıdır, ancak bu hatayla ilgili gibi görünmüyor – irco

+0

Benim kötü ... Protokol bildiriminden önce "@Class LoginForm" ı unuttum. Cevabı kaynağında düzenledim.o protokolü görebilmesi için –

+0

sayesinde ben de MyViewController bir ithalat yaptı ve, nedeni derler ama yine de konsol yakalanmamış istisna 'NSInvalidArgumentException' gösterir ShowLogin fonksiyonunun ilk satırı isabet önce çöküyor : '- [UIViewController showLogin]: örneğine gönderilen tanınmayan seçici 0x5936080' – irco

0

LoginForm sınıfınızın UIViewController'dan türediği anlaşılıyor. UIViewController sınıfında delegate özelliği yok, dolayısıyla derleme hatasınıniz var.

Sorununuz, muhtemelen ilk olarak eylemin çağrılmadığıdır. bir eylem için uygun imzadır:

- (IBAction)showLogin:(id)sender; 

sender argüman gereklidir. Arandığından emin olmak için yönteminize bir kesme noktası koyun.

+0

loginForm için temsilci nasıl bildiririm? ve evet sanırım haklısın kırılma noktasını göremiyorum – irco

+0

Bu yanlış. Bir eylem yöntemi sıfır parametrelerini ya da birini (gönderen kontrolü) alabilir ve Arayüz Oluşturucu bir - (IBAction) doWhatever yöntemine kadar bir kontrolün keyfini çıkartacaktır. –

İlgili konular