首先,在 todolistviewController 中。我有填充字符串的textfield和buttonSave,以便在 tableview1 中显示保存字符串。对我来说这个简单的说明。
接下来,我创建文本字段上的按钮,当点击文本字段时,将显示 tableview2 以选择menu1(字符串),menu2(字符串),menu3(字符串)。
当选择的菜单将返回 todolistviewController 并在文本字段中选择显示菜单。我需要知道如何传递菜单(String)以在textfield中显示。
答案 0 :(得分:0)
通常有两种方法可以实现您的目标,即将TabelView2Controller中的NSString传递回TodoListViewController。
首先,您需要在TabelView2Controller @property (nonatomic, strong) NSString *selectedMune
中声明一个NSString属性,并将其更新为UITableViewDelegate方法tableView:didSelectRowAtIndexPath:
中所选的菜单(String)
然后您可以选择以下两种模式之一
在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。将选定的菜单字符串存储在通知的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。