通常有两种方法可以实现您的目标,即将一个 NSString 从 TabelView2Controller 传回 TodoListViewController。
首先,您需要在TabelView2Controller @property (nonatomic, strong) NSString *selectedMune 中声明一个NSString 属性,并在UITableViewDelegate 方法tableView:didSelectRowAtIndexPath: 中将其更新为您选择的菜单(字符串)
那么你可以选择以下两种模式之一
- 委托模式
在您的 TabelView2Controller 的头文件中定义一个协议。在该协议中,定义一个用于在 tableView2Controller 中通知选择更新的方法。
//TableView2Controller.h
@protocol TableView2ControllerDelegate <NSObject>
@required
- (void)updateSelectedMenu:(NSString *)selectedMenu;
@interface TableView2Controller: UITableViewController
@property (nonatomic, strong) NSString *selectedMune;
@property (weak, nonatomic) id<tableView2ControllerDelegate> delegate;
@end
让你的 TodoListViewController 符合这个协议。
您应该将 TodoListViewController 设置为 TableView2Controller 的委托。如果您使用 Storyboard,您应该在 TodoListViewController 的方法performSegueWithIdentifier:sender: 中进行设置。
然后在TableView2Controller的UITableViewDelegate方法tableView:didSelectRowAtIndexPath:你可以调用updateSelectedMenu:通知delegate你的选择改变了。而在TodoListViewController的updateSelectedMenu:方法中,你可以根据输入的参数更新你的UI。
- 通知模式
在你的 TableView2Controller 中定义一个 NSNotification。将选中的菜单字符串存储在通知的userInfo中,并将此通知发布到TableView2Controller的UITableViewDelegate方法tableView:didSelectRowAtIndexPath:
//TableView2Controller.h
extern NSString *const TableView2ControllerSelectedMenuDidChangedNotification;
extern NSString *const TableView2ControllerSelectedMenuKey;
@interface TableView2Controller: UITableViewController
@property (nonatomic, strong) NSString *selectedMune;
@end
//TableView2Controller.m
NSString *const TableView2ControllerSelectedMenuDidChangedNotification = @"TableView2ControllerSelectedMenuDidChangedNotification";
NSString *const TableView2ControllerSelectedMenuKey = @"TableView2ControllerSelectedMenuKey";
@implementation TableView2Controller
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSDictionary *userInfo = @{TableView2ControllerSelectedMenuKey: self.selectedMune};
[[NSNotificationCenter defaultCenter] postNotificationName:TableView2ControllerSelectedMenuDidChangedNotification
object:self
userInfo:userInfo];
}
@end
在 TodoListViewController 中注册 TableView2ControllerSelectedMenuDidChangedNotification
// TodoListViewController.m
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(selectedMenuUpdateNotification:)
name:TableView2ControllerSelectedMenuDidChangedNotification
object:nil];
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
然后在 TodoListViewController 的selectedMenuUpdateNotification: 方法中,您可以使用 userInfo 中的 TableView2ControllerSelectedMenuKey 获取更新 selectedMenu 并相应地更新您的 UI。