2

ECSlidingViewControllerのテストを開始しましたが、アクセスしようとした後FirstTopViewController、大きな問題が発生しました。ZBarReaderDelegateFirstToViewControllerが既に 実装されており、デリゲートのすべての例がデリゲートからメソッドをトリガーしていないためです。

基本的に私はこのようなものを持っています:

FirstTopViewController.h

#import ...MyStuff...
#import "UnderRightViewController.h"

@interface FirstTopViewController : UIViewController <RightViewDelegate, ZBarReaderDelegate>

@property (weak, nonatomic) IBOutlet UITextView *labelTotal; 

@end

FirstTopViewController.m

#import "FirstTopViewController.h"

@implementation FirstTopViewController
- (void)setTotalViewController:(UnderRightViewController*)controller didTotalChange:(NSString*)total
{
    //labelTotal.text = total;
    NSLog(@"I'm here!!! and received %@", total);
}

私が持っている反対側から

UnderRightViewController.h

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

@class UnderRightViewController;

@protocol RightViewDelegate <NSObject>

- (void)setTotalViewController:(UnderRightViewController*)controller didTotalChange:(NSString*)total;

@end

@interface UnderRightViewController : UITableViewController

@property (nonatomic, weak) id <RightViewDelegate> delegate;

@end

UnderRightViewController.m

#import "UnderRightViewController.h"

@interface UnderRightViewController ()

@end

@implementation UnderRightViewController

@synthesize delegate;

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [delegate setTotalViewController:self didTotalChange:@"foo"];
}
@end

私は一日中このパズルを解こうとしていますが、setTotalViewControllerクビになることはありません。

前もって感謝します。

4

3 に答える 3

2

その時にUnderRightViewControllerに移動するときに、FirstTopViewControllerFirstTopViewController.mでこれを行う必要があります:-

 UnderRightViewController *obj = [[UnderRightViewController
                                                                  alloc] initWithNibName:@"UnderRightViewController" bundle:nil];

obj.delegate  = self; // u forget to assign protocol handler


[self.navigationController pushViewController:obj animated:YES];


[obj release];
于 2013-10-21T10:15:28.883 に答える
1

上記のコードでは、カスタム デリゲートを使用しており、メッセージを 1 つのコントローラー クラスに別のコントローラー クラスに送信するためにも使用しています。したがって、以下はカスタム デリゲートの同じサンプル コードです。実装する必要がある同様の方法で正常に動作しています。また、コードの問題は、デリゲートを設定していないことです。そのため、同じ設定をしてメソッドを呼び出す方法を以下に従ってください。 . ここでは、説明の目的にNSStringもかかわらず、定義した戻り値の型のみを同じメソッドを使用しましたが、要件に応じて使用できます。voidvoid

最初のコントローラー クラスAWindowController.h

 @interface AWindowController : NSWindowController<sampleDelegate>

    {
        NSString *textA;
    }
    @property(readwrite,retain)NSString *textA;
    -(IBAction)doSet:(id)sender;
    @end

#import "AWindowController.h"
#import "BWindowController.h"

@interface AWindowController ()
@end
@implementation AWindowController
@synthesize textA;

- (id)initWithWindow:(NSWindow *)window
{
    self = [super initWithWindow:window];
    if (self) {
        // Initialization code here.
    }

    return self;
}

- (NSString *)setTotalViewController:(BWindowController*)controller didTotalChange:(NSString*)total
{
    NSLog(@"recieved");
    return @"recieved";
}

- (void)windowDidLoad
{
    [super windowDidLoad];

    // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
}

-(NSString*)windowNibName
{
    return @"AWindowController";
}

-(IBAction)doSet:(id)sender
{
    [self setTextA:@"Awindow Button Pressed"];
    BWindowController *b=[[BWindowController alloc]init];
    b.delegate=self;
    [b showWindow:self];
}
@end

2 番目のコントローラー クラスBWindowController.h

     #import <Cocoa/Cocoa.h>
    #import "sampleDelegate.h"
    @class BWindowController;
    @protocol sampleDelegate <NSObject>
    @required
    //-(NSString *)getDataValue;
    - (NSString *)setTotalViewController:(BWindowController*)controller didTotalChange:(NSString*)total;
    @end
    @interface BWindowController : NSWindowController<sampleDelegate>
    {
        NSString *bTextValue;
        id<sampleDelegate>delegate;
    }
    @property(readwrite,retain)NSString *bTextValue;
    @property(readwrite,assign)id<sampleDelegate>delegate;
    @end


  #import "BWindowController.h"
@interface BWindowController ()

@end
@implementation BWindowController
@synthesize bTextValue,delegate;
- (id)initWithWindow:(NSWindow *)window
{
    self = [super initWithWindow:window];
    if (self) {
        // Initialization code here.
    }

    return self;
}
- (NSString *)setTotalViewController:(BWindowController*)controller didTotalChange:(NSString*)total;
{
    return nil;
}
- (void)windowDidLoad
{
    NSString *str= [[self delegate]setTotalViewController:self didTotalChange:@"recieved"];
    self.bTextValue=str;
    [super windowDidLoad];

    // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
}

-(NSString*)windowNibName
{
    return @"BWindowController";
}

@end

出力に添付されたスクリーンショット:- 以下はウィンドウで、AwindowController.hクラス です。ここに画像の説明を入力

上の同じウィンドウの下でボタンを押し、Awindow ボタンを押すとデータが送信さ
れ、Bwindow で通知が受信されます。上記を使用して、スクリーン ショットに添付されているカスタム デリゲートを定義します。 ここに画像の説明を入力

于 2013-10-17T14:09:56.697 に答える
1

UnderRightViewController のデリゲートを設定するコードはありません。これらのコントローラーの両方を所有するオブジェクトはわかりませんが、UnderRightViewController と FirstTopViewController のいずれかが表示される前に、次のようなコードを実行する必要があります。

FirstTopViewController *ftvc = //... where ever you get a reference to this from
UnderRightViewController *urvc = ...;
urvc.delegate = ftvc;
于 2013-10-17T03:29:11.480 に答える