作業中のアプリでストーリーボードでデリゲートを使用するコツをつかむのに問題があります。データを返すなど、他のいくつかの検索を確認しました:呼び出されていないデリゲートメソッドですが、役に立ちません。この時点で、2つのビューの基本を除いて、アプリ内のすべてを削除しました。最初のビューは、ボタンを押すとモーダルビューに移行する基本的なビューコントローラーであり、データの1つがテキストフィールドに入力されます。保存ボタンはそのモーダルビューにあり、押すと最初のビューに戻ります。もちろん、入力したデータを最初のビューにも送り返したいと思います。簡単に聞こえますか?もちろんですが、どこかで動作させることができません。私の代理人の電話は決してかけられないようです。コードは次のとおりです。
MyDayViewController.h-これは最初のビューコントローラです
#import <UIKit/UIKit.h>
#import "AddRatingModalViewController.h"
@interface MyDayViewController : UIViewController <AddRatingDelegate>
@property (strong, nonatomic) IBOutlet UIButton *addRatingBtn;
@property (strong, nonatomic) IBOutlet UIButton *addAccompBtn;
@property (strong, nonatomic) IBOutlet UILabel *ratingLabel;
@end
MyDayViewController.m
#import "MyDayViewController.h"
@implementation MyDayViewController
@synthesize addRatingBtn;
@synthesize addAccompBtn;
@synthesize ratingLabel;
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"ToRatingVC"])
{
NSLog(@"Setting MyDayVC as a delegate of AddRatingMVC");
AddRatingModalViewController *addRatingController = segue.destinationViewController;
addRatingController.delegate = self;
}
}
- (void)theSaveButtonTapped:(AddRatingModalViewController *)controller withRating:(NSNumber*) rating
{
NSLog(@"In theSaveButtonTapped method of MyDayVC");
ratingLabel.text = [[NSString alloc]initWithFormat:@"%@", rating];
[self dismissModalViewControllerAnimated:YES];
}
- (void)viewDidUnload
{
[self setAddRatingBtn:nil];
[self setAddAccompBtn:nil];
[self setRatingLabel:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
@end
AddRatingModalViewController.h-これはモーダルビューコントローラーです
#import <UIKit/UIKit.h>
@class AddRatingModalViewController;
@protocol AddRatingDelegate
- (void)theSaveButtonTapped:(AddRatingModalViewController *)controller withRating:(NSNumber*) rating;
@end
@interface AddRatingModalViewController : UIViewController
@property (nonatomic, weak) id <AddRatingDelegate> delegate;
@property (strong, nonatomic) IBOutlet UITextField *addRatingTextField;
- (IBAction)cancelBtnPressed:(id)sender;
- (IBAction)saveBtnPressed:(id)sender;
@end
AddRatingModalViewController.m
#import "AddRatingModalViewController.h"
@implementation AddRatingModalViewController
@synthesize addRatingTextField;
@synthesize delegate;
- (IBAction)cancelBtnPressed:(id)sender {
[self dismissModalViewControllerAnimated:YES];
}
- (IBAction)saveBtnPressed:(id)sender {
NSNumber *ratingARMVC = [NSNumber numberWithInteger:[addRatingTextField.text integerValue]];
NSLog(@"The entered Rating in ARMVC is %@", ratingARMVC);
NSLog(@"Telling the MyDayVC Delegate that Save was tapped on the AddRatingTVC");
[self.delegate theSaveButtonTapped:self withRating:ratingARMVC];
}
- (void)viewDidUnload
{
[self setAddRatingTextField:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
@end
コンソールからの出力は次のとおりです。
2012-07-16 16:49:16.384 MyDayDelTest[4695:f803] Setting MyDayVC as a delegate of AddRatingMVC
2012-07-16 16:49:39.274 MyDayDelTest[4695:f803] The entered Rating in ARMVC is 7
2012-07-16 16:49:39.275 MyDayDelTest[4695:f803] Telling the MyDayVC Delegate that Save was tapped on the AddRatingTVC
これは、Saveメソッドでデリゲート呼び出しが行われることになっている直前です。どんな助けでも大歓迎です!ストーリーボードを使用しない場合はテストが機能すると言うべきですが、アプリの他の部分でストーリーボードを使用するため、ストーリーボードを使用するにはこれが必要です。前もって感謝します。