2012-11-18 51 views
2

我是Objective C新手,並且遇到了一個我認識的問題,必須是一個非常簡單的問題 - 我想也許我錯誤地接近了它。Objective C - UIAlertViewDelegate無法訪問其他類中的UILabel

我創建了一個UIAlertViewDelegate類,我想成爲我的View Controller類中的一些UIAlertViews的代理。

當用戶按下按鈕並輸入一些文本時,我想用我的ViewController類中的標籤更新該文本。但是,我顯然不能從我的UIAlertViewDelegate類中引用標籤「outputLabel」,除非我以某種方式傳遞它。

我得到的錯誤是 「未聲明的標識符的 'outputLabel' 使用。」

ViewController.h

@interface ViewController : UIViewController <UIAlertViewDelegate>; 
... 
@property (strong) UIAlertViewDelegate *AVDelegate; 

ViewController.m

- (void)viewDidLoad 
{ 
    UIAlertViewDelegate *AVDelegate; 
    AVDelegate = [[UIAlertViewDelegate alloc] init]; 
    [super viewDidLoad]; 
} 

- (IBAction)doAlertInput:(id)sender { 
    UIAlertViewDelegate *AVDelegate; 
    AVDelegate = [[UIAlertViewDelegate alloc] init]; 

    UIAlertView *alertDialogue; 
    alertDialogue = [[UIAlertView alloc] 
       initWithTitle:@"Email Address" 
       message:@"Please Enter Your Email Address:" 
       delegate:self.AVDelegate 
       cancelButtonTitle:@"OK" 
       otherButtonTitles:nil, nil]; 
    alertDialogue.alertViewStyle=UIAlertViewStylePlainTextInput; 
    [alertDialogue show]; 
} 

UIAlertViewDelegate.m

#import "UIAlertViewDelegate.h" 

@implementation UIAlertViewDelegate 

- (void)alertView:(UIAlertView *)alertView 
clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    NSString *buttonTitle = [alertView buttonTitleAtIndex:buttonIndex]; 
    NSString *alertTitle = [alertView title]; 

    if ([alertTitle isEqualToString:@"Alert Button Selected"] || [alertTitle   isEqualToString:@"Alert Button Selected"]) { 

    if ([buttonTitle isEqualToString:@"Maybe Later"]) 
    { 
     [email protected]"User Clicked: 'Maybe Later'"; 

UIAlertViewDelegate.h

@interface UIAlertViewDelegate : UIViewController <UIAlertViewDelegate,UIActionSheetDelegate>; 

很多年前我用Java做了一些工作。我想我必須以某種方式,但林不知道通過我UIAlertViewDelegate類視圖上的語法,將不勝感激在正確的方向指向...

詹姆斯

+0

@ you:http://stackoverflow.com/questions/8688153/ios-beginner-uialertview-window-with-3-buttons-check-what-button-was-pressed看看這個'問題'中的代碼 –

+0

「當用戶按下一個按鈕並輸入一些文本時,我想讓我的ViewController類中的標籤更新爲該文本。」我試圖弄清楚你在這裏做什麼,以及它如何處理警報視圖。你究竟想要做什麼?我可以告訴你,你不必製作一個UIAlertViewDelegate類,你的視圖控制器將成爲alert視圖的代表。 –

回答

1

有各種各樣的東西在這裏,你不應該這樣做,但是,與主要的影響你的問題開始....

你不應該自己發明UIAlertViewDelegate類,這意味着不這樣做......

@interface UIAlertViewDelegate : UIViewController <UIAlertViewDelegate,UIActionSheetDelegate>; 

因爲UIAlertViewDelegate是一個協議,你也不能使用alloc

正確是主要的事情...

@interface ViewController : UIViewController <UIAlertViewDelegate> 

,指出你的ViewController能夠充當UIAlertViewDelegate,因此你的代碼創建警報可以使用delegate:self,而不是試圖創建一個單獨的委託屬性或對象。

您可能仍然有問題,但這些更改應該清理一下。

+0

同意Phillip Mills。只需在你的視圖控制器中寫入這個方法1) - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex –

+0

2)分配一個代理 –

+0

你好,非常感謝你的快速響應。我其實只是做這個測試。最初我確實把委託作爲自我分配,但我想看看是否可以有一個完整的單獨的類,它可以作爲整個應用程序的委託。這可能嗎?如果是這樣,你覺得我應該怎麼做呢? – JamesLCQ

0

您的視圖控制器是alert視圖的委託,因此,您不需要創建委託對象。

使用self(視圖控制器)作爲委託參數來初始化警報視圖。

然後在視圖控制器中實現委託方法(用於警報視圖)。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAlertViewDelegate_Protocol/UIAlertViewDelegate/UIAlertViewDelegate.html

代表團的重點是使人們有可能的對象有任何類回調。

我建議閱讀協議和委託。

http://developer.apple.com/library/ios/#documentation/General/Conceptual/DevPedia-CocoaCore/Delegation.html#//apple_ref/doc/uid/TP40008195-CH14-SW1

我猜你要使用的警報視圖中輸入文本,所以你會警報視圖樣式設置爲UIAlertViewPlainTextStyle,並通過訪問文本字段設置在回調的一個標籤來自alertView對象。