3

プロトコルに問題があります。

私の「初期ビュー コントローラー」はナビゲーション コントローラーです。ルートページで、ビューコントローラーが埋め込まれた他のナビゲーションコントローラーを表示します。onclick セグエを起動する必要があります...これは完全に機能しますが、「ViewController」のデリゲートメソッドは呼び出されません。

追加した画像は、iOS 5 で InterfaceBuilder を使用して 2 つの NavigationController 間の接続を構築する方法の例です。

画像

MyViewController.h

@protocol MyProtocol <NSObject>

@required
- (void) myFunction:(NSString *)string;

@end

@interface MyViewController : UIViewController <MyProtocol>

@property (nonatomic, assign) id<MyProtocol> delegate;

@end

MyViewController.m

#import "MyViewController.h"
@implementation PropertyController
@synthesize delegate = _delegate;

- (void) myFunction:(NSString *)string {
    [_delegate myFunction:string];
}

- (IBAction) callDelegate:(id)sender {
     ![enter image description here][1][self myFunction:@"test"];
}

これは、上から NavigationController を表示している ViewController のコードです。

ViewController.h

#import "MyViewController.h"

@interface ViewController : UIViewController <MyProtocol>

ViewController.m

#import "ViewController.h"

@implementation ViewController

- (void) myFunction:(NSString *)string {
    NSLog(@"myFunction was called");
}

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    [((MyViewController *) segue.destinationViewController) setDelegate:self];
}

- (IBAction) showModalNavigationController {
    [self performSegueWithIdentifier:@"NameFromSegueInInterfaceBuilder" sender:self];
}

問題の解決策が見つかりません。

誰かが私を助けてくれることを願っています

ありがとうございました :)

4

2 に答える 2

1

ここにいくつかの問題があります。

  1. ストーリーボードのスクリーンショットには、2番目のナビゲーションコントローラーがあります。PropertyControllerをナビゲーションコントローラーに埋め込む必要はありません。代わりに、ルートビューコントローラーをPropertyControllerに直接セグエさせます。何らかの理由でそのナビゲーションコントローラーが必要な場合は、prepareForSegue上記の実装を変更する必要があります。segue.destinationViewControllerこの場合はを指しているためUINavigationControllerです。したがって、そのnavコントローラーオブジェクトを取得してから、そのnavコントローラーオブジェクトsetDelegateのに送信する必要がありrootViewControllerます。ただし、繰り返しになりますが、そのナビゲーションコントローラーを維持することにした場合に限ります。
  2. MyViewControllerあなたViewControllerPropertyControllerクラスとどのように関係していますか?PropertyControllerクラス(またはスーパークラス)には、プロパティの@propertyandsynthesizeステートメントが必要です。delegate
于 2011-12-07T14:27:31.760 に答える
0

私は同じ問題を抱えていました。それを機能させるために、xcodeがあまり好きではない回避策を見つけましたが、それでも機能しています->デリゲートを設定すると、ナビゲーションコントローラーにビューが表示されますデリゲートとして、宛先コントローラーで NSLog self.delegate を使用すると、null になります。これを防ぐには -->

self.delegate = self.navigationController.delegate; 

宛先コントローラー (viewdidload) で、ナビゲーション コントローラーで作成した委任を取得し、宛先コントローラーで使用できるようにします。

汚いですが、それが私が見つけた唯一の方法です。それが役に立てば幸い。

于 2014-08-31T07:24:19.637 に答える