2

ビューでは、これをfirstViewと呼びましょう。次のようにsecondViewを作成し、firstViewで特定のことが発生した場合にプッシュしました。

SecondViewController *secondVC = [[secondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];


    [self.navigationController pushViewController:secondVC animated:YES];
    [secondVC release];

ここで、secondViewにいるときに、ボタンが押されたとすると、firstViewに戻り、secondViewからfirstViewに値を戻します(secondViewからfirstViewへのテキストフィールドの整数値を言います)。

これが私が試したことです:

@protocol SecondViewControllerDelegate;

#import <UIKit/UIKit.h>
#import "firstViewController.h"

@interface SecondViewController : UIViewController <UITextFieldDelegate>
{
    UITextField *xInput;
    id <SecondViewControllerDelegate> delegate;
}

- (IBAction)useXPressed:(UIButton *)sender;

@property (assign) id <SecondViewControllerDelegate> delegate;

@property (retain) IBOutlet UITextField *xInput;

@end

@protocol SecondViewControllerDelegate
- (void)secondViewController:(SecondViewController *)sender xValue:(int)value;

@end

そしてmファイルで

- (IBAction)useXPressed:(UIButton *)sender
{
    [self.delegate secondViewController:self xValue:1234]; // 1234 is just for test
}

そして、firstViewで私は次のことを行いました。

#import "SecondViewController.h"

@interface FirstViewController : UITableViewController <SecondViewControllerDelegate> {

}

@end

そして実装:

- (void) secondViewController:(SecondViewController *)sender xValue:(int)value
{
    [self.navigationController popViewControllerAnimated:YES];
}

ここで、問題はFirstViewControllerの1つで、「プロトコル「SecondViewControllerDelegate」の定義が見つかりません。2つでは、デリゲートメソッド(上記の最後のコード)がまったく呼び出されないという警告が表示されます。誰か教えてください。どうしたの?

4

3 に答える 3

1

この行の後

SecondViewController *secondVC = [[secondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];

追加

secondVC.delegate = self;

また、代わりに

- (void) secondViewController:(SecondViewController *)sender xValue:(int)value
{
    [self.navigationController popViewControllerAnimated:YES];
}

あなたは使用する必要があります

- (void) secondViewController:(SecondViewController *)sender xValue:(int)value
{
    [sender popViewControllerAnimated:YES];
}
于 2012-07-01T19:08:13.043 に答える
1

.hFirstViewControllerファイル内:

#import "SecondViewController.h"

@interface FirstViewController : UITableViewController <SecondViewControllerDelegate> {

SecondViewController *secondViewController;

}

@end

実装ファイルで、SecondViewControllerインスタンスを初期化し、次の行で自分自身をデリゲートプロパティに割り当てます。

secondViewController.delegate = self;

次に、デリゲートメソッドを定義します。

- (void)secondViewController:(SecondViewController *)sender xValue:(int)value
{
NSLog ("This is a Second View Controller with value %i",value)
}
于 2012-07-01T19:11:31.377 に答える
0

問題1の場合:の@protocol定義はSecondViewControllerDelegate次のようになりsecondViewController.hます。このファイルがインポートされfirstViewController.hますか?そうでなければ、それはプロトコルについて知りません。

問題2:問題1とはまったく関係がない可能性があります。アクションが適切に接続されていることを確認しますか?期待どおりにメソッドが実際に呼び出されていることを確認するために、NSLog()呼び出しを行うことができますか?useXPressed:

于 2012-07-01T19:07:51.430 に答える