通常有兩種方法可以實現您的目標,即將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代碼? –