2012-03-31 58 views
5

我在我的應用程序中構建了一個登錄系統,該系統將被多次調用。因此,我不是將代碼複製粘貼到多個位置,而是製作NSObject類,以便在需要時調用該類,而不是。在NSObject類中顯示UIAlertView類

登錄系統將顯示一個UIAlertView,當點擊「OK」時,系統將嘗試登錄。我可以調用該類並顯示UIAlertView,但我無法分辨哪些按鈕被點擊。這裏是我的代碼:

//Calling the login system 

Login *login = [[Login alloc] init]; 

Login.h

#import <Foundation/Foundation.h> 

@interface Login : NSObject <UIAlertViewDelegate> { 

} 

@end 

Login.m

#import "Login.h" 

@implementation Login 

+(void)initialize { 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Login" message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil]; 

    [alert show]; 
    [alert release]; 

    NSLog(@"Testing"); 

} 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 

    NSLog(@"Here"); 

    NSString *title = [alertView buttonTitleAtIndex:buttonIndex]; 

    if([title isEqualToString:@"OK"]) { 

     NSLog(@"Tapped"); 

    } 

} 

@end 

現在,之前我把UITextFields在視圖中,我只是想讓應用知道哪個按鈕被點擊了。 Testing出現在日誌中,但不會出現HereTapped。謝謝!

+2

不要覆蓋'+(無效)initialize' !!!! '+ initialize'與'-init'有很大不同**!你需要確保你正確地調用'super'。此外,請確保您遵循MVC指南。通常,模型對象不應顯示UI元素。 – 2012-03-31 16:06:02

+0

傑克勞倫斯是正確的:誰是自我,它是一個UIAlertView代表?它甚至沒有被初始化,這就是它不作爲委託被調用的方式。 – 2012-03-31 16:08:59

+1

你們是對的!我之前沒有這樣做過,因此我將+(void)初始化爲 - (id)init並將其工作。傑克勞倫斯:寫你的評論作爲答案,所以我可以標記你的權利。 – 2012-03-31 16:10:07

回答

1

您的警報視圖不應該被類方法+(void)初始化,而是通過實例 - (id)init方法調用,這就是爲什麼你的實例沒有得到通知。

類加載時調用類方法「+(void)initialize」。

實例方法「 - (id)init」的名字以init開始,並在創建(實例化)對象時調用。

-(id)init { 

    //alert view 

    self = [super init]; 

    return self; 

} 
+0

感謝您的幫助。對於閱讀此答案的人:將+(void)初始化爲 - (id)init。 – 2012-03-31 17:13:27

+0

根據@JackLawrence評論 – moxy 2012-03-31 17:36:30

0

只是

switch(buttonIndex){ 
    case 0: 
     NSLog(@"Tapped First Button"); 
     break; 
    case 1: 
     break; 
    default: 
     break; 
} 
0

當你在你指的是類本身,而不是類的實例類方法使用self。但是,您的委託方法是一種實例方法。您可能希望調用者創建一個Login實例並讓該實例創建警報,再加上它的委託。

0

很簡單:

在.h文件

在您的視圖控制器類爲您的NSObject類的屬性

@屬性(非原子,保留)LoginCheckNSObject * LoginCheckerObject;

在M檔:

self.LoginCheckerObject=[[LoginCheckNSObject alloc] init]; 
[self.LoginCheckerObject setDelegate:self]; 
[self.LoginCheckerObject TrackNowLogin]; 
+0

@ Jack Humphries改進,將其添加到您的視圖控制器類中。而已 – SathishKumarEro 2014-10-29 15:12:47