当然,你可以用委托方法做你想做的事。委托方法可以像任何其他方法一样返回值,所以你可以做这样的事情。在这个例子中,我只是在 ViewController 中有一个标签,它显示来自表格视图的选定行的数据。这是 ViewController 的代码:
@protocol DetailDelegate <NSObject>
-(NSString *)valueForNextOrPreviousCell:(NSInteger) nextOrPrevious;
@end
@interface ViewController : UIViewController
@property (weak,nonatomic) id <DetailDelegate> delegate;
@property (nonatomic) NSInteger selectedRow;
@property (strong,nonatomic) NSString *dataToDisplay;
@end
@interface ViewController ()
@property (weak,nonatomic) IBOutlet UILabel *label;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.label.text = self.dataToDisplay;
}
-(IBAction)nextOrPreviousClicked:(UIBarButtonItem *)sender {
if ([sender.title isEqualToString:@"Next"]) {
self.selectedRow += 1;
}else{
self.selectedRow -= 1;
}
NSString *data = [self.delegate valueForNextOrPreviousCell:self.selectedRow];
self.label.text = data;
}
然后在 TableController 的 prepareForSegue 方法和委托方法的实现中,我有这个:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSInteger row = [self.tableView indexPathForSelectedRow].row;
ViewController *vc = segue.destinationViewController;
vc.delegate = self;
vc. selectedRow = row;
vc.dataToDisplay = self.theData[row];
}
-(NSString *)valueForNextOrPreviousCell:(NSInteger)nextOrPrevious {
if (nextOrPrevious < 0) nextOrPrevious = 0;
if (nextOrPrevious >= self.theData.count -1) nextOrPrevious = self.theData.count - 1;
return self.theData[nextOrPrevious];
}