正确访问Segue的目标视图控制器来分配协议代理

在实现select列表时,我遇到了在集成segue和协议时遇到的一些问题。

在我的select列表中.h我有:

#import <UIKit/UIKit.h> @protocol SelectionListViewControllerDelegate <NSObject> @required - (void)rowChosen:(NSInteger)row; @end @interface SelectColor : UITableViewController <NSFetchedResultsControllerDelegate> -(IBAction)saveSelectedColor; @property (nonatomic, strong) id <SelectionListViewControllerDelegate> delegate; @end 

在我的select列表.m我有:

 @implementation SelectColori @synthesize delegate; //this method is called from a button on ui -(IBAction)saveSelectedColore { [self.delegate rowChosen:[lastIndexPath row]]; [self.navigationController popViewControllerAnimated:YES]; } 

我想通过从另一个表视图执行segue来访问这个select列表视图:

 @implementation TableList ... - (void)selectNewColor { SelectColor *selectController = [[SelectColor alloc] init]; selectController.delegate = (id)self; [self.navigationController pushViewController:selectController animated:YES]; //execute segue programmatically //[self performSegueWithIdentifier: @"SelectColorSegue" sender: self]; } - (void)rowChosen:(NSInteger)row { UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"Error Title" message:@"Error Text" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; [errorAlert show]; } 

如果我使用以下命令导航到select列表:

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

显示警报。 如果我改用:

[selfseSegueWithIdentifier:@“SelectColorSegue”sender:self];

没有警报显示,因为,我想,我不会传递到目的地select列表selectController。 有什么想法来解决这个问题吗?

当使用Segue将数据传递给destinationViewController时,您需要使用该方法

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"SelectColorSegue"]) { SelectColor *vc = segue.destinationViewController; vc.delegate = self; } } 

从苹果文件

这个方法的默认实现什么也不做。 子类可以覆盖它,并使用它来传递任何相关的数据到即将显示的视图控制器。 segue对象包含指向两个视图控制器以及其他信息的指针。