我正在使用两个视图控制器(故事板)。一个是标准ViewController
,另一个是TableViewController
。我在TableViewController
中设置了一个自定义协议,这是一个名为didSelectWith
的方法,包含两个参数,即类NSString
。它会在TableViewController
委托方法didSelectRowAtIndexPath
中调用。
这个想法是从第一个视图控制器的一个按钮转到表视图,将字符串取在单元格textLabel.text
内,然后返回到第一个视图控制器。然后它解除表视图控制器,并为该字符串设置一个简单的标签对象。到目前为止,我无法回到第一个视图控制器。
以下是表视图控制器的代码:
#import <UIKit/UIKit.h>
@class DeparmentsViewController;
@protocol deparmentsDelegate <NSObject>
-(void)didSelectWith:(DeparmentsViewController *)controller department:(NSString *)department;
@end
@interface DeparmentsViewController : UITableViewController
@property (nonatomic, weak) id <deparmentsDelegate> delegate;
@end
#pragma mark - Table view delegate method
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"didSelectRowAtIndexPath has executed");
[self.delegate didSelectWith:self department:[self.tableView cellForRowAtIndexPath:indexPath].textLabel.text];
}
以下是第一个视图控制器的代码:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"departmentsSegue"]) {
self.vc = [segue destinationViewController];
DepartmentViewController
self.vc.delegate = self;
}
}
-(void)didSelectWith:(DeparmentsViewController *)controller department:(NSString *)department
{
[controller dismissViewControllerAnimated:YES completion:nil];
self.departmentLabel.text = department;
NSLog(@"Delegate method called within ViewController");
}
所有必要的商店都相应地联系在一起。如果需要更多代码,我可以尽快编辑这篇文章。