2

私はObjective Cを初めて使用し、非常に単純な問題であるとわかっている問題を抱えています-おそらく間違った方法でアプローチしていると思います。

View Controller クラスにあるいくつかの UIAlertViews のデリゲートにしたい UIAlertViewDelegate クラスを作成しました。

ユーザーがボタンを押してテキストを入力すると、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"])
    {
        outputLabel.text=@"User Clicked: 'Maybe Later'";

UIAlertViewDelegate.h

@interface UIAlertViewDelegate : UIViewController <UIAlertViewDelegate,UIActionSheetDelegate>;

私は何年も前にJavaでいくつかの仕事をしました。UIAlertViewDelegate クラスに何らかの方法でビューを渡す必要があると思いますが、構文についてはよくわかりません。正しい方向へのポインターを大いに感謝します...

ジェームズ

4

2 に答える 2

1

ここには、してはいけないことがたくさんありますが、質問に影響を与える主なものから始めて....

独自のクラスを発明するべきUIAlertViewDelegateではありません。つまり、これを行わないでください...

@interface UIAlertViewDelegate : UIViewController <UIAlertViewDelegate,UIActionSheetDelegate>;

はプロトコルであるためUIAlertViewDelegate、使用することもできませんalloc

主に正しいのは…

@interface ViewController : UIViewController <UIAlertViewDelegate>

つまり、あなたViewControllerは として機能できるので、別のデリゲート プロパティまたはオブジェクトを作成しようとする代わりにUIAlertViewDelegate、アラートを作成するためのコードを使用できます。delegate:self

まだ質問がある可能性がありますが、これらの変更により少しはきれいになるはずです。

于 2012-11-18T17:35:11.473 に答える
0

ビューコントローラはアラートビューのデリゲートであるため、デリゲートオブジェクトを作成する必要はありません。

デリゲート引数としてself(ビューコントローラー)を使用してアラートビューを初期化します。

次に、View Controller内に(アラートビューの)デリゲートメソッドを実装します。

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オブジェクトからテキストフィールドにアクセスして、コールバックの1つにラベルを設定します。

于 2012-11-18T20:54:58.290 に答える