首先,在todolistviewController中。我有用于填充字符串的文本字段和用于保存字符串的buttonSave,以显示在tableview1中。这个简单的笔记给我。
接下来,我在文本字段上创建按钮,当在文本字段上点击时,将显示tableview2以选择menu1(String),menu2(String),menu3(String)。
选择菜单后,将返回todolistviewController并显示在文本字段中选择的菜单。我需要知道如何通过menu(String)在文本字段中显示。
最佳答案
通常有两种方法可以实现目标,即将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:
通知委托您您的选择已更改。在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。关于ios - 如何在TableView和ViewController之间传递字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39575179/