如何在tableview和viewcontroller之间传递字符串

时间:2016-09-19 14:05:50

标签: ios swift uitableview uiviewcontroller uipickerview

首先,在 todolistviewController 中。我有填充字符串的textfield和buttonSave,以便在 tableview1 中显示保存字符串。对我来说这个简单的说明。

接下来,我创建文本字段上的按钮,当点击文本字段时,将显示 tableview2 以选择menu1(字符串),menu2(字符串),menu3(字符串)。

当选择的菜单将返回 todolistviewController 并在文本字段中选择显示菜单。我需要知道如何传递菜单(String)以在textfield中显示。

1 个答案:

答案 0 :(得分:0)

通常有两种方法可以实现您的目标,即将TabelView2Controller中的NSString传递回TodoListViewController。

首先,您需要在TabelView2Controller @property (nonatomic, strong) NSString *selectedMune中声明一个NSString属性,并将其更新为UITableViewDelegate方法tableView:didSelectRowAtIndexPath:中所选的菜单(String)

然后您可以选择以下两种模式之一

  1. 委托模式
  2. 在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。

    1. 通知模式
    2. 在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。