通常有两种方法可以实现您的目标,即将NSString从TabelView2Controller传递回TodoListViewController。
首先,你需要在TabelView2Controller @property (nonatomic, strong) NSString *selectedMune
中的UITableViewDelegate方法tableView:didSelectRowAtIndexPath:
然后声明一个NSString财产,并更新到您选择的菜单(字符串),您可以选择以下两种模式之一
- 代理模式
定义您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:
来通知代表您的选择已更改。并且在TodoListViewController的updateSelectedMenu:
方法中,您可以根据输入参数更新您的UI。
- 通知模式
在TableView2Controller定义NSNotification。在TodoListViewController的selectedMenuUpdateNotification:
方法TodoListViewController存储选定的菜单字符串中通知的用户信息,并在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
注册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];
}
然后,你可以得到更新selectedMenu在userInfo中使用TableView2ControllerSelectedMenuKey并相应地更新您的UI。
ohh.thank you so much。 –
我有想法,但你可以有示例swift代码? –