首先,在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/

10-10 01:49