0

FirstViewControllerSecondViewController&という 3 つのビュー コントローラーを作成しましThirdViewControllerた。FirstViewControllerを押し、SecondViewController同様にSecondViewController押しThirdViewControllerます。

これThirdViewControllerは UITableViewController です。

SecondViewControllerThirdViewControllerはカスタム プロトコルがあります。どちらもFirstViewController、それぞれのデリゲートを使用することに価値があります。

問題は、SecondViewControllerが に値を正常に渡しているのにFirstViewController、 がThirdViewControllerそれを実行できないことです。

は からSecondViewController直接ナビゲートされているためFirstViewController、それを渡すことができ、 とThirdViewController接続されていFirstViewControllerないため、データを渡すことができないためですか?

どんな助けでも大歓迎です。

編集:

ボタンアクションをFirstViewController押すだけです。SecondViewController

SecondViewController.h

@protocol secondViewDelegate <NSObject>

-(void)didCompleteSending:(NSArray *)array;

@end


@interface secondView : UIViewController
@property (nonatomic,strong) NSArray *footballPlayers;
@property (assign) id<secondViewDelegate>delegate;
- (IBAction)btnAction:(id)sender;
- (IBAction)btnGoToThirdView:(id)sender;

SecondViewController.m

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.

footballPlayers = [[NSArray alloc]initWithObjects:@"Rooney",@"Van Persie",@"Ronaldo",@"Kagawa", nil];
}

- (IBAction)btnAction:(id)sender {
[delegate didCompleteSending:footballPlayers];
}
- (IBAction)btnGoToThirdView:(id)sender {
thirdView *objthirdView = [[thirdView alloc]init];
objthirdView.delegate=self;
[self.navigationController pushViewController:objthirdView animated:YES];
}

同様に私は for を持っていThirdViewControllerます。

In FirstViewController.h -(void)didSendDetailsFromThirdView:(NSString *)colors{ NSLog(@"selected string is = %@",colors); }

-(void)didCompleteSending:(NSArray *)array{
  for (NSString *str in array) {
    NSLog(@"%@",str);
  }
 }

-(void)didSendDetailsFromThirdView:(NSString *)colors「ThirdViewController」から呼び出されません。

2回目の編集

- (IBAction)btnGoToThirdView:(id)sender {
FirstViewController *objFirstViewController = [FirstViewController alloc]init];
thirdView *objthirdView = [[thirdView alloc]init];
objthirdView.delegate=objFirstViewController;
[self.navigationController pushViewController:objthirdView animated:YES];
}
4

1 に答える 1

0

.m のデリゲートを自分自身ThirdViewControllerに設定していますSecondViewController

objthirdView.delegate=self;

これは、 のデリゲートが ではThirdViewControllerなくSecondViewControllerであることを意味しFirstViewControllerます。への参照を保持し、FirstViewControllerこのSecondViewControllerようにデリゲートとして使用します。

objthirdView.delegate=myFirstViewController;

からポップすることができないと仮定するとThirdViewController、既に実装したデリゲート メソッドを介してデータを渡すために をFirstViewController誤用する可能性があります。しかし、私はそれをお勧めしません - それは良いデザインではありません.SecondViewControllerFirstViewController

于 2012-10-05T15:08:52.610 に答える